0
var text = "Price: 123 dollar."
text.replace(/((\d+\.?\d+?)|(\d{1,3}(\,\d{3})+)) *([a-zA-Z]+)/, function(a,b,c){
document.write(a+" | "+b+" | "+c);
return;
}

出力は次のとおりです。123 | 123

しかし、出力を次のようにする必要があります。123 | ドル

正規表現 /\b((?:\d+.)?\d+) *([a-zA-Z]+)/ で動作します

わからない.. なぜ b と c が同じなの?!

修正:解決策は、不要なキャプチャ グループを削除することでした。

/(( ?: \d+.?\d+?)|( ?: \d{1,3}( ?: \,\d{3})+)) *([a-zA-Z]+)/

@Mythril と @cababunga に感謝します

4

1 に答える 1

1

より多くのキャプチャ グループを作成したためです。これは、置換関数へのより多くのパラメーターを意味します。これを試してください:

var text = "Price: 123 dollar."
text.replace(/((\d+\.?\d+?)|(\d{1,3}(\,\d{3})+)) *([a-zA-Z]+)/, function(a,b,c,d,e,f){
    document.write(a+" | "+b+" | "+f);}
);
于 2012-09-01T03:45:03.327 に答える