Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何解释正则表达式中特殊字符的不同处理?_Javascript_Regex - Fatal编程技术网

Javascript 如何解释正则表达式中特殊字符的不同处理?

Javascript 如何解释正则表达式中特殊字符的不同处理?,javascript,regex,Javascript,Regex,在Chrome 10开发者工具控制台中测试: > str = "\t"; " " > JSON.stringify(str) ""\t"" > str.replace(/\t/g,"\\t") "\t" 一切都好。正则表达式能够复制部分JSON.stringify行为并识别制表符 现在让我们把\t换成\b: > str = "\b"; "" > JSON.stringify(str) ""\b"" > str.replace(/\b/g,

在Chrome 10开发者工具控制台中测试:

> str = "\t";
  " "
> JSON.stringify(str)
  ""\t""
> str.replace(/\t/g,"\\t")
  "\t"
一切都好。正则表达式能够复制部分
JSON.stringify
行为并识别制表符

现在让我们把
\t
换成
\b

> str = "\b";
  ""
> JSON.stringify(str)
  ""\b""
> str.replace(/\b/g,"\\b")
  ""
在这种情况下,
replace
找不到退格字符


那么,尊敬的So同事们,有人能给我一个线索,解释一下行为上的差异吗?

正则表达式中的转义序列与字符串文本中的转义序列不同。在正则表达式中,
\b
匹配单词边界<代码>\t在正则表达式和字符串文本中恰好相同


MDC有一个目标,当然没有什么比去更重要的了。

你这样说似乎很明显。下一个问题将是,如何修改正则表达式以查找并替换JavaScript字符串中的反斜杠?@Jim:反斜杠的重新转义序列与字符串文本中的转义序列相同:两个反斜杠:\\。或者,如果您是指退格,则必须使用十六进制转义(
\x08
)或Unicode转义(
\u0008
),或者将字符串传递到
RegExp
构造函数中(我建议避免,这会很快变得非常混乱):
新建RegExp(\\\b”)
,它创建一个包含反斜杠和退格的字符串,然后将其传递到
RegExp
构造函数中。
RegExp
会看到反斜杠,并按字面意思处理下一个字符(反斜杠)。你知道这会让人困惑的T.J.你是个明星<代码>str.replace(/\x08/g,“\\b”)交付货物。