2011-10-12 39 views
2

這是我投入Chrome的瀏覽器控制檯JavaScript的正則表達式匹配()結果

>> 'abc,de.fg\nhi'.match(/.*/g) 
["abc,de.fg", "", "hi", ""] 

爲什麼在結果出現空字符串?

一個單獨的問題:

>> 'abc\ndef\n'.match(/(.*)\n/) 
["abc 
", "abc"] 
>> 'abc\ndef\n'.match(/.*\n/) 
["abc 
"] 

爲什麼第一個給兩個值?我無法找到任何指示組(括號)應該追加以匹配結果的文檔。這在使用/g修飾符時不會發生。

回答

2

關於你的第二個問題,如果有團體呈現的結果數組包含在位置零整場比賽和組在隨後的位置相匹配。

+0

我相信你在這個觀察中是正確的,我想出了相同的解釋,但是它不適用於使用/ g修飾符! –

+0

隨着全局匹配標誌結果數組保持每一場比賽的順序,所以我想沒有組比賽的餘地。 – pakopa

0

正則表達式中的*與零個或多個字符匹配。這個。匹配除了新行之外的任何內容。因此,它會在換行符上分割並匹配前後的空白區域。

'abc,de.fg\nhi'.match(/.+/g) 
["abc,de.fg", "hi"] 
+0

是的,使用'+'顯然是大多數情況下的方法。但我想知道爲什麼最後有一個空字符串?如果像你說的那樣在'\ n'之前和之後匹配一個空的,爲什麼結果不是'[「abc,de.fg」,「」,「」,「hi」,「」]]' ? –

+1

正則表達式已經不匹配(因爲它不匹配\ n)並且從那一點開始繼續。之後,它會找到字符串的「hi」部分(因爲它會找到儘可能多的字符)並匹配。然後當它到達字符串的末尾時,它會匹配另一個空字符。 –