何时使用构造函数或文字表示正则表达式?

时间:2013-07-24 22:55:37

标签: javascript

在下面的代码中,name是一个局部变量。

我在google上找到了类似的代码。

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

但我也被告知使用这样的正则表达式字面:

var res = /(\s|^) + name/.test(class);

哪个更正或更好?

2 个答案:

答案 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 字面上