正则表达式中的错误

A mistake in Regex

本文关键字:错误 正则表达式      更新时间:2023-09-26
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

因为您创建了更多捕获组。这意味着替换函数的更多参数,请尝试以下操作:

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);}
);