Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 何时对正则表达式使用构造函数或文本?_Javascript - Fatal编程技术网

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”。