一尘不染

JavaScript为什么正则表达式构造函数需要双重转义?

javascript

在下面的正则表达式中,\s表示空格字符。我想象正则表达式解析器正在遍历字符串,\并且知道并知道下一个字符是特殊的。

但这不是事实,因为需要两次转义。

为什么是这样?

var res = new RegExp('(\\s|^)' + foo).test(moo);

有没有具体的例子说明如何将一次逃生误解为其他?


阅读 471

收藏
2020-04-22

共1个答案

一尘不染

您正在通过将字符串传递给RegExp构造函数来构造正则表达式。

\ 是字符串文字中的转义字符。

\由字符串字面解析消耗…

const foo = "foo";

const string = '(\s|^)' + foo;

console.log(string);

…因此,传递给RegEx编译器的数据是普通数据,s而不是普通数据\s

您需要转义\以将\as 表示为数据,而不是本身是转义字符。

2020-04-22