RegEx中的模式变量不适用于说明符

时间:2012-07-01 12:23:51

标签: javascript regex

以下代码按预期编写“响应”:

var str = "Would you like to have responses";
var pattern = "Response";
document.write(str.match(new RegExp(pattern,'gi')));

但是当我添加一个像\b这样的说明符时,下面写的是“null”:

var str = "Would you like to have responses";
var pattern = "\bResponse";
document.write(str.match(new RegExp(pattern,'gi')));

我怎样才能让它发挥作用?


有趣的是,以下两项工作

document.write(str.match(new RegExp(/Response/gi)));
document.write(str.match(new RegExp(/\bResponse/gi)));

但我想使用new RegExp(pattern,modifiers);语法。

1 个答案:

答案 0 :(得分:2)

反斜杠在字符串中有特殊含义,它是转义字符。如果要从字符串创建正则表达式,则必须转义反斜杠。

如果转义的字符具有相同的含义,您将不会注意到它:

 '\n'.match('\n');
 '\n'.match('\\n');
两个都工作。但是,\b在字符串中没有这样的含义 new RegExp("\bResponse");变为/Response/\b是退格符,不代表可见字符)。当转义没有特殊含义时,反斜杠就会被删除。