正则表达式中的一个错误

时间:2012-09-01 03:40:06

标签: javascript regex replace

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 +。)?\ dd +)*([a-zA-Z] +)/

无法弄清楚..为什么b和c是一样的?!

修复:解决方案是删除不必要的捕获组:

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

感谢@Mythril和@cababunga

1 个答案:

答案 0 :(得分: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);}
);