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

但我需要输出为: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 回答