为什么这个正则表达式导致无限循环?

时间:2013-01-18 19:58:02

标签: javascript regex

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']

这样的数组

我不明白的是正则表达式好友一切似乎都好。 enter image description here

2 个答案:

答案 0 :(得分:5)

尝试将正则表达式更改为:

var myregexp = /(\S+)(?:,\s|$)/g;

我认为循环可能是因为它在末尾重复匹配一个空字符串。

由于我认为你不想获得零长度名称,所以这可能是一个更好的正则表达式。

答案 1 :(得分:2)

只是为了兴趣,使用零宽度正向前瞻断言的一种更简单的方法:

function listPlayers( subject ) {
    return subject.match( /\S+(?=,\s|$)/g );
}