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

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

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

但事实并非如此,因为需要双重逃脱。

为什么是这样?

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

是否有一个具体的例子说明单个逃避如何被误解为其他东西?


胡子哥哥
浏览 972回答 4
4回答

达令说

您正在通过将字符串传递给RegExp构造函数来构造正则表达式。您需要转义它,\以便您的字符串文字可以在将其转换为正则表达式之前将其表示为数据。

哈士奇WWW

在那里你要创建一个字符串的代码里面,反斜杠是一个JavaScript转义字符第一,这意味着像转义序列\t,\n,\",等将被翻译成其JavaScript对口(制表符,换行符,报价等),和这将成为字符串的一部分。双反斜杠表示实际字符串本身中的单个反斜杠,因此如果您想在字符串中使用反斜杠,则首先将其转义。所以当你通过说出你生成一个字符串时var someString = '(\\s|^)',你真正在做的是创建一个带有值的实际字符串(\s|^)。

慕妹3146593

\在字符串中用于转义特殊字符。如果你想在字符串中使用反斜杠(例如对于\ in \ s),你必须通过反斜杠转义它。所以\成为\\。编辑:甚至不得不在这里做,因为\\在我的回答中转向\。

呼啦一阵风

正则表达式需要一个字符串表示\s,在JavaScript中可以使用文字生成"\\s"。这是一个现实的例子来说明为什么"\s"还不够:alert("One backslash:          \s\nDouble backslashes: \\s");
打开App,查看更多内容
随时随地看视频慕课网APP