2011-09-04 60 views
5

這兩者之間是否存在差異?替換(/ [^ a-z0-9]/gi,'')和替換(/ [^ a-zA-Z0-9]/g'')之間的區別

replace(/[^a-z0-9]/gi, ''); 
replace(/[^a-zA-Z0-9]/g, ''); 

此外,是否有使用一種或另一種在任何時間顯著差異?

編輯:有關性能,我做了一些測試http://jsperf.com/myregexp-test

+1

不,他們做同樣的事情 – sdfadfaasd

+3

請注意它的實際功能。嘗試''天真「.replace(/ [^ a-z0-9]/gi,'');' – NullUserException

+0

@NullUserException但最終JS中沒有解決這個問題的解決方案。即使'\ W'也一樣。 – xanatos

回答

5

不,由第一,i末使正則表達式不區分大小寫的意義,它並不重要,如果它發現的字母大寫或小寫。

第二個匹配大寫和小寫字母,但確保它們是大寫或小寫。所以你最終會得到相同的結果。

+1

請注意,這通常不正確。例如,'Σ','σ'和'ς'都是不區分大小寫的,如果你簡單地在像[[Σσ]'這樣的字符類中枚舉其中的兩個,你就無法得到它們,就像那樣錯過最後的西格瑪,'ς'。因爲Javascript不支持Unicode,所以你在這裏搞砸了,但是在一個真正的^ H^H^H^H語言中,casefolding會在'/Σ/ i'匹配中拾取它們。 – tchrist