我编写了一个 JavaScript 函数,用于向表达式中的数字文字添加千位分隔符 (,), 我当前的代码工作正常,但当表达式包含已用逗号格式化的数字时会中断。 例如
这会起作用
formatExp("1000 + 10000")
输出:
"1,000 + 10,000"
这不会
formatExp("1,0000")
结果:
"1,0,000"
我尝试修改正则表达式以忽略已经格式化的数字文字
const NUMBER_REGEX = /(?:\d{1,3})(?:,?\d{3})*/g;
第一部分匹配1-3位数字
/(?:\d{1,3})
第二部分匹配零个或多次出现的可选逗号,后跟 3 位数字
(?:,?\d{3})*/g;
但没有按预期工作。 我该如何解决它?
感谢您的回复。
请尝试一下:
const NUMBER_REGEX = /\d{1,3}(?:,\d{3})*(?!\d)/g;
function formatExp(exp) {
return exp.replace(NUMBER_REGEX, (match) => {
return match.replace(/\B(?=(\d{3})+(?!\d))/g, ',');
});
}
console.log(formatExp("1000 + 10000"));
// Output: "1,000 + 10,000"
console.log(formatExp("1,000 + 10,000"));
// Output: "1,000 + 10,000"
console.log(formatExp("1,000,000 + 10,000,000"));
// Output: "1,000,000 + 10,000,000"