在下面的代码中,name
是一个局部变量。
我在google上找到了类似的代码。
var res = new RegExp('(\\s|^)' + name).test(class);
但我也被告知使用这样的正则表达式字面:
var res = /(\s|^) + name/.test(class);
哪个更正或更好?
答案 0 :(得分:3)
你必须使用构造函数。文字不能有变量,所有内容都将被解释为字面,因此+
将成为量词,name
将成为字符串“name”。
同样\\s
是双重转义的,因为它在构造函数的字符串中,但在文字中你只需要转义一次\s
。
您可以在浏览器中快速测试:
var name = 'foo';
var re1 = /\d + name/;
var re2 = new RegExp('\\d'+ name);
console.log(re1); //=> /\d + name/
console.log(re2); //=> /\dfoo/
答案 1 :(得分:1)
Regex literals更容易读写,因为你不需要字符串转义正则表达式转义字符 - 你可以使用它们(反斜杠,引号)。此外,它们在脚本“编译”期间仅被解析一次 - 每次评估行时都不需要执行任何操作。
如果要动态构建正则表达式,则只需要使用RegExp
constructor。这就是这种情况,因为你想使用name
变量。文字在这里不起作用 - 你所拥有的文字与一个或多个空格匹配,字符串name
字面上。