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 に答える