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