2015-04-12 58 views
3

以下example是有點混亂對我說:雄辯的Javascript遍歷正則表達式匹配

​​

具體來說,我不明白這有一個「循環」的效果。如果一直保持調用match[1],它將如何在一個字符串內的所有匹配項中運行。我不知道exec有什麼副作用嗎?

編輯: 我還想要一個如何match[1]工作的答案。 match[1]如何產生答案?當我測試這種類型的事情我自己,我得到undefined,看

> var y = /\d+/g.exec('5') 
undefined 
> y 
[ '5', index: 0, input: '5' ] 
> y[1] 
undefined 

請告訴我怎麼回事呢?不是y [0],還是在上面的情況下,匹配[0]?如:

> y[0] 
'5' 

回答

5

RegExp對象記住最後匹配的位置與lastIndex屬性。

引用MDN Documentation

如果你的正則表達式使用"g"標誌,你可以使用exec()方法多次找到相同的字符串匹配連續。當您這樣做時,搜索從正則表達式的lastIndex屬性test()也將提前lastIndex屬性)指定的str的子字符串開始。

重要說明:引用部分的第一行的第一部分很重要。 If your regular expression uses the「g」flag只有當RegEx有g標誌時,您纔會得到此行爲。

+1

此外,當您將'/ g'添加到正則表達式時,您會明確地詢問這個行爲。如果你刪除了'/ g',你會發現令人驚訝的行爲消失了。 –

+0

@BenjaminGruenbaum我留下了一個筆記。謝謝:-) – thefourtheye

+0

@thefourtheye好的,我可以理解這一點。但是你並沒有真正回答我關於「匹配[1]」的問題。它如何不匹配[0]'請參閱我編輯的帖子。 – ApathyBear