2009-05-01 58 views
19

,我想我找到了答案,每一個問題我有,但我想我反正發佈,因爲它可能是別人,更多的澄清可能有用有幫助。JavaScript就無法分割使用正則表達式

我試圖用正則表達式與前瞻與javascript函數分裂。出於某種原因,即使我在匹配時找到匹配項,它仍不會拆分字符串。我原本以爲我的正則表達式是使用lookahead的問題。下面是一個簡單的例子:

不起作用:

"aaaaBaaaa".split("(?=B)."); 

作品:

"aaaaBaaaa".match("(?=B)."); 

它出現的問題是,在分割例子中,傳遞的字符串沒有被解釋作爲正則表達式。使用正斜槓而不是引號似乎可以解決問題。

"aaaaBaaaa".split(/(?=B)./); 

我證實了我的理論有以下傻傻的看着例如:

"aaaaaaaa(?=B).aaaaaaa".split("(?=B)."); 

沒有任何其他人都覺得奇怪的是,匹配函數假定你有一個正則表達式,而分割功能不?

+0

我一直使用/正則表達式/(不含引號)語法的一切:比賽,拆分,更換。我沒有意識到你在某些情況下不需要。 – 2009-05-01 16:40:30

+2

其實是有道理的,讓比賽()假設一個正則表達式(什麼*否則*會有,你可以匹配反對?)和分裂()承擔的字符串,因爲一個字符串分割可能比上一個正則表達式分裂速度更快。只有當你傳遞一個實際的正則表達式到split()時,它纔會執行較慢的正則表達式分割。 – Tomalak 2009-05-01 17:01:47

回答

31

String.split接受字符串或正則表達式作爲其第一個參數。 String.match方法只接受正則表達式。

我想象一下String.match將嘗試與任何通過的工作;所以如果你傳遞一個字符串,它會將其解釋爲正則表達式。該String.split方法沒有這樣做,因爲它可以接受正則表達式和字符串的奢侈品;在這種情況下,猜測是愚蠢的。


編輯:(來源: 「JavaScript權威指南」)

String.match需要一個正則表達式的工作。傳遞的參數需要是指定要匹配的模式的對象。如果此參數不是RegExp,則首先將其轉換爲一個,方法是將其傳遞給構造函數RegExp()

3

如果我沒有記錯(我可能是大錯),拆分方法JavaScript實現的正則表達式引擎之前被廣泛使用,所以它可能是爲了向後兼容。