在下面的正则表达式中,\s表示空格字符。我想象正则表达式解析器正在遍历字符串,\并且知道并知道下一个字符是特殊的。
\s
\
但这不是事实,因为需要两次转义。
为什么是这样?
var res = new RegExp('(\\s|^)' + foo).test(moo);
有没有具体的例子说明如何将一次逃生误解为其他?
您正在通过将字符串传递给RegExp构造函数来构造正则表达式。
\ 是字符串文字中的转义字符。
该\由字符串字面解析消耗…
const foo = "foo"; const string = '(\s|^)' + foo; console.log(string);
…因此,传递给RegEx编译器的数据是普通数据,s而不是普通数据\s。
s
您需要转义\以将\as 表示为数据,而不是本身是转义字符。