为什么正则表达式构造函数需要双重转义?在下面的正则表达式中,\s表示空格字符。我想象正则表达式解析器,正在通过字符串看到\并知道下一个字符是特殊的。但事实并非如此,因为需要双重逃脱。为什么是这样?var res = new RegExp('(\\s|^)' + foo).test(moo);是否有一个具体的例子说明单个逃避如何被误解为其他东西?
4 回答
哈士奇WWW
TA贡献1799条经验 获得超6个赞
在那里你要创建一个字符串的代码里面,反斜杠是一个JavaScript转义字符第一,这意味着像转义序列\t
,\n
,\"
,等将被翻译成其JavaScript对口(制表符,换行符,报价等),和这将成为字符串的一部分。双反斜杠表示实际字符串本身中的单个反斜杠,因此如果您想在字符串中使用反斜杠,则首先将其转义。
所以当你通过说出你生成一个字符串时var someString = '(\\s|^)'
,你真正在做的是创建一个带有值的实际字符串(\s|^)
。
慕妹3146593
TA贡献1820条经验 获得超9个赞
\在字符串中用于转义特殊字符。如果你想在字符串中使用反斜杠(例如对于\ in \ s),你必须通过反斜杠转义它。所以\成为\\。
编辑:甚至不得不在这里做,因为\\在我的回答中转向\。
呼啦一阵风
TA贡献1802条经验 获得超6个赞
正则表达式需要一个字符串表示\s
,在JavaScript中可以使用文字生成"\\s"
。
这是一个现实的例子来说明为什么"\s"
还不够:
alert("One backslash: \s\nDouble backslashes: \\s");
添加回答
举报
0/150
提交
取消