2013-02-21 104 views
1

虽然研究在JavaScript中使用正则表达式,一个可能遇到的例子有两种类型:是否需要使用var foo = new RegExp?

答:

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

B:

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

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

+0

@JamesMontagne我猜我的问题更基本.. – Roy 2013-02-21 19:44:22

回答

6

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

+0

此外,一个重要的区别是,表达式编译时(在评估与运行时间),处理大型数据集和/或许多时可能很昂贵常用表达。 – marekful 2013-02-21 19:50:58

+0

@MarcellFülöp这是一个很好的观点;我不知道它在现代JavaScript引擎中的差异有多大。我认为过去有一个明确的“.compile()”函数,但是这已经被弃用了很长一段时间。 – Pointy 2013-02-21 20:16:20

1

是否需要使用var foo = new RegExp

不,显然不是。另一个也适用。

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

Regex literals更容易读写,你不需要字符串转义正则表达式的转义字符 - 你可以用它们(反斜杠,行情)。而且,它们在脚本“编译”期间仅被解析一次 - 每次评估该行时都不需要执行任何操作。如果您想动态构建正则表达式,只需要使用RegExp constructor

1

下面是一个'动态'正则表达式的例子,您可能需要new RegExp

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

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

相关问题