如何在 JavaScript 表达式中格式化数字文字

问题描述 投票:0回答:1

我编写了一个 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;

但没有按预期工作。 我该如何解决它?

感谢您的回复。

javascript expression regexp-replace
1个回答
0
投票

请尝试一下:

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"
© www.soinside.com 2019 - 2024. All rights reserved.