我发现这个正则表达式函数为算术表达式添加了千位逗号分隔符。
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
console.log(numberWithCommas("1000")); // ok
console.log(numberWithCommas("1000.03")); // ok
console.log(numberWithCommas("1000.03+2300")); // ok
console.log(numberWithCommas("1000.03+0.2300")); // not ok
但是,如果操作数为十进制,则我不想添加任何逗号分隔符。我应该如何相应地修改此正则表达式?
p / s数学运算符可以为+,-,*,/
最佳答案
一种选择是将replace与回调函数一起使用,并匹配1+乘以零,然后是点和零。
如果匹配,则在替换中返回它,否则返回逗号。
\b0+\.\d+(?:\.\d+)*|\B(?=(\d{3})+(?!\d))
Regex demo
function numberWithCommas(x) {
const regex = /\b0+\.\d+(?:\.\d+)*|\B(?=(\d{3})+(?!\d))/g;
return x.toString().replace(regex, (m) => m !== "" ? m : ",");
}
console.log(numberWithCommas("1000"));
console.log(numberWithCommas("1000.03"));
console.log(numberWithCommas("1000.03+2300"));
console.log(numberWithCommas("1000.03+0.2300"));
关于javascript - 如果操作数为小数,则使用正则表达式防止逗号分隔,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58429528/