2013-02-21 35 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選項)是更好,因爲它更容易編寫和閱讀。

相關問題