2010-12-20 97 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