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



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/

10-15 05:51