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

我不明白的是在正则表达式上一切似乎都很好。 在此处输入图像描述

4

2 回答 2

5

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

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

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

由于我认为您对获取零长度名称不感兴趣,因此通常这可能是一个更好的正则表达式。

于 2013-01-18T20:10:44.373 回答
2

只是出于兴趣,使用零宽度正向预测断言的一种可能更简单的方法:

function listPlayers( subject ) {
    return subject.match( /\S+(?=,\s|$)/g );
}
于 2013-01-19T17:22:40.907 回答