1

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

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

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

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

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

哪个是正确的或更好的?

4

2 回答 2

3

你必须用构造函数来做。文字不能有变量,所有内容都将按字面意思解释,因此+将是量词,并且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/
于 2013-07-24T22:58:48.920 回答
1

正则表达式文字更易于阅读和编写,因为您不需要对正则表达式转义字符进行字符串转义 - 您可以只使用它们(反斜杠、引号)。此外,它们仅在脚本“编译”期间解析一次 - 每次评估该行时都不需要执行任何操作。

仅当您想动态构建正则表达式时才需要使用RegExp构造函数。这里就是这种情况,因为您想使用该name变量。文字不能在这里工作 - 您拥有的文字确实匹配一个或多个空格和name 字符串

于 2013-07-25T00:10:46.933 回答