使用var foo = new RegExp是否必要?

时间:2013-02-21 19:39:13

标签: javascript regex

在研究javascript中正则表达式的使用时,可以遇到两种类型的示例:

A:

var regex = /^[a-zA-Z0-9]+$/;

B:

var regex = new RegExp ("^[a-zA-Z0-9]*$"); 

是否有必要使用var foo = new RegExp?或者,何时应该选择每种方法?

3 个答案:

答案 0 :(得分:6)

当您必须在运行时动态组装正则表达式时,RegExp()构造函数很有用。如果表达式是完全静态的,则使用本机正则表达式语法(“A”)更容易。原生语法的易用性源于这样一个事实:您不必担心引用反斜杠,就像正则表达式以字符串常量开始一样。

答案 1 :(得分:1)

  

是否有必要使用var foo = new RegExp

不,显然不是。另一个也可以。

  

或者,何时应该选择每种方法?

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

如果要动态构建正则表达式,则只需要使用RegExp constructor

答案 2 :(得分:1)

以下是“动态”正则表达式的示例,您可能需要new RegExp

var search = 'dog',
    re = new RegExp('.*' + search + '.*');

如果它是一个静态正则表达式,那么文字语法(你的A选项)更好,因为它更容易编写和读取。