舉另一個容易明白的例子
>>> var regex = new RegExp("color=(#[\\d\\w]{6}|\w{1,})","gi");
>>> regex.exec("color=#dfdfdfcolor=#dfdfef")
color=#dfdfdf,#dfdfdf
>>> regex.lastIndex
13
>>> regex.exec("color=#dfdfdfcolor=#dfdfef")
color=#dfdfef,#dfdfef
>>> regex.lastIndex
26
>>> regex.exec("color=#dfdfdfcolor=#dfdfef")
null
>>> regex.lastIndex
0
g會令regex每一次都停在它搜尋的位置,等下一次再由那位置再開始搜尋.
而你在這期間換了第二個字串,但regex的搜尋位置還停在之前一次搜尋位置.......那當然回傳NULL.........
g正確的用法應該是用Loop找完所有的值(直至回傳NULL),之後才轉去另一個字串....你只要一個值根本不用g
如果你真的勉強想用,每次用完就應該reset regex.lastIndex 去 0, |