2010-12-20 47 views

回答

7

两个评价是完全相同的正则表达式,但首先是一个文字,这意味着你不能使用它里面的任何变量,你不能动态生成一个正则表达式。

第二个显式使用构造函数,可用于创建动态正则表达式。

var x = '3', r = (new RegExp(x + '\d')); r.test('3d') 

以上是使用构造函数动态构造正则表达式的示例,您无法以字面形式进行操作。

在99%的情况下,您将只依赖JS的所有正则表达式的第一个版本(文字)。在你需要说的高级场景中,用户输入动态地构造一个正则表达式,然后你需要第二种形式。

编辑#1第一个匹配一个数字,第二个匹配字母d。为了让它等于第一个,我们假设你打算这样做,你必须加倍逃避第二个。请记住,如果第二个示例是新的RegExp('\ d'),我上面输入的建议是准确的。

/\d/.test('3') // true 
(new RegExp('\d')).test('3') // false 
(new RegExp('\\d')).test('3') // true 
+1

尔,正则表达式'3 \ D'不匹配' “3D”'... – Amber 2010-12-20 20:51:20

+0

感谢您的交代,我问的原因是我有这个表达式/^+ | [\\ /#;] | + $/gi(1或更多空格或包含\ /#;或以一个或多个空格结尾)。在每个奇数时间使用非构造函数时,结果都是错误的。例如。结果是交替的。当使用构造函数时,每次都按预期工作。奇怪! – bob 2010-12-20 20:55:28

+0

还有另一个区别:文字只在* parse时间创建* one *对象*而构造函数总是创建一个新对象。这将在ES5中进行更改,并且文字也将始终返回一个新对象。 – 2010-12-20 21:29:50