在下面的代码中,name
是一个局部变量。
我在谷歌上找到了类似的代码。
var res = new RegExp('(\\s|^)' + name).test(class);
但我也被告知要使用这样的正则表达式文字:
var res = /(\s|^) + name/.test(class);
哪个是正确的或更好的?
在下面的代码中,name
是一个局部变量。
我在谷歌上找到了类似的代码。
var res = new RegExp('(\\s|^)' + name).test(class);
但我也被告知要使用这样的正则表达式文字:
var res = /(\s|^) + name/.test(class);
哪个是正确的或更好的?
你必须用构造函数来做。文字不能有变量,所有内容都将按字面意思解释,因此+
将是量词,并且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/
正则表达式文字更易于阅读和编写,因为您不需要对正则表达式转义字符进行字符串转义 - 您可以只使用它们(反斜杠、引号)。此外,它们仅在脚本“编译”期间解析一次 - 每次评估该行时都不需要执行任何操作。
仅当您想动态构建正则表达式时才需要使用RegExp
构造函数。这里就是这种情况,因为您想使用该name
变量。文字不能在这里工作 - 您拥有的文字确实匹配一个或多个空格和name
字符串。