2016-07-05 41 views
0

偶然发现了这一点,不知道是什么原因。JavaScript RegExp:为什么会导致双反斜杠(\)出错?

// Results in "Syntax error in regular Expression". 
var re = RegExp('\\'); 

我知道构造函数函数需要一个字符串作为参数。并且反斜杠在字符串中用于转义具有特殊含义的字符。我知道我必须将\ d这样的字符转义为\\ d。

因此:正确的反斜杠应该被解释为一些正常的字符。

反而会引发错误。为什么?

任何人都可以解释这一点吗?

+0

因为'/ \ /'是一个无效的正则表达式。如果你想要一个正则表达式来匹配一个反斜杠,你需要'/ \\ /'或'new RegExp('\\\\')' – Phil

回答

2

我相信你收到此错误的原因是您正在输入JavaScript引擎的有效正则表达式是单个反斜杠\

原因是第一个反斜杠转义第二个。所以你正在放置一个字面反斜杠,这没有任何意义。

+1

你是对的。 “var test1 ='\';”反斜杠转义第二个撇号。所以字符串没有结尾符号,并且是无效的。类似的东西不能存在。最短的字符串只包含反斜杠,即“var test2 ='\\'”。因此,搜索test1的RegExp是没有意义的。谢谢您的帮助。你给了正确的输入。 –

3

字符串字面值'\\'创建一个字符串,其中只包含一个反斜杠字符,因为在字符串文字中反斜杠是一个转义字符。

单个反斜杠字符不是有效的正则表达式。

如果您希望相匹配的正则表达式话单反斜线需要进行正则表达式中逃脱,所以你需要做的要么:

re = /\\/; 
// or 
re = new RegExp('\\\\'); 
1

\用于逃避\的字符串,所以得到\d如您所写,你需要做\\d

同样在正则表达式中,您需要跳过\\\

所以你有两个需要在正则表达式中使用的转义语法,使用一个\\意味着\在regexp中是不正确的,因为它需要被转义。

所以要解决这个问题,你需要双重转义:\\\\ - 这将是一个正则表达式寻找\

0

反斜杠\是正则表达式的转义字符。因此,双反斜杠确实意味着单个反斜杠。 \(反斜杠),后跟任何[\^$。 ?* +(){}转义特殊字符来抑制其特殊含义。

相关问题