function listPlayers(subject){
var players=[];
var myregexp = /(\S*)(?:,\s|$)/g;
var match = myregexp.exec(subject);
while (match != null) {
players.push(match[1]);
match = myregexp.exec(subject);
}
return players;
}
我想匹配的字符串是這樣�r Henderson�r�f, Pedrin�r�f, �c~�lArthur�r�f, John�r�f
爲什麼這個正則表達式導致無限循環?
我期望的輸出是這樣的['Henderson�r�f', 'Pedrin�r�f', '�c~�lArthur�r�f', 'John�r�f']
我不明白的是對正則表達式的哥們似乎一切都OK的數組。
無限循環在哪裏? –
問題是'*'與前瞻一起。最後,表達式匹配時不消耗任何字符(由於'*',它不必因爲「*」而匹配最後一個位置,因爲lookeahead),所以'.exec'被卡住了。 –
@FelixKling:本質上是正確的,但在OP的正則表達式中沒有前瞻。這是執行他的'''錨點,以及JavaScript的零寬度匹配和'exec()'方法的處理。 ([ref](http://blog.stevenlevithan.com/archives/exec-bugs)) –