首页 > 解决方案 > 如果操作数有小数,正则表达式可防止逗号分隔符

问题描述

我发现了这个正则表达式函数,它为算术表达式添加了千位逗号分隔符。

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 数学运算符可以是 +,-,*,/

标签: javascriptregex

解决方案


一种选择是使用带有回调函数的替换并匹配 1+ 次零,然后是点和零。

如果匹配,则在替换中返回,否则返回逗号。

\b0+\.\d+(?:\.\d+)*|\B(?=(\d{3})+(?!\d))

正则表达式演示

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


推荐阅读