用正则表达式在数字和十进制数之间插入逗号



我看到很多帖子在数字或十进制数字中插入逗号,但不是两者都有,所以我在这里问一下。

1234 -> 1,234
1234567 -> 12,34,567
123 -> 123
1234.123 -> 1,234.123
0.123 -> 0.123
0.12345 -> 0.12345

我想用正则表达式插入逗号,但是我不能同时支持数字和十进制数。

我尝试了这些,但没有工作....

/(d)(?=(d{3})+)/
/B(?=(d{3})+(?!d)).?d*/

有什么好办法吗?

你可以使用这个正则表达式来替换

(?=(?<!.)(?!^)d{3}(?:b|(?:d{3})+)b)

查看regex演示

<<h4> JavaScript例子/h4>

function format(string) {
let pattern = /(?=(?!^)d{3}(?:b|(?:d{3})+)b)/g;
if (string.includes('.')) {
pattern = /(?=(?!^)d{3}(?:b|(?:d{3})+)b.)/g;
}
return string.replace(pattern, ',');
}
console.log('1234', '->', format('1234'));
console.log('123', '->', format('123'));
console.log('1234.123', '->', format('1234.123'));
console.log('0.123', '->', format('0.123'));
console.log('12345642.234234', '->', format('12345642.234234'));

你可以在Javascript中使用这个正则表达式(现代Javascript支持向后看):

(?<!.d*)(d)(?=(?:d{3})+(?:.|$))

RegEx细节:

  • (?<!.d*):负向后看,断言当前位置前没有小数点
  • (d):匹配组#1中的数字并捕获
  • (?=:开始向前看
    • (?:d{3})+:确保我们前面有1组或更多的3位数
    • (?:.|$):后面跟一个点或行尾
  • ): End forward

RegEx Demo 1

或者如果你在PCRE上,那么使用:

.d+$(*SKIP)(*F)|(d)(?=(?:d{3})+(?:.|$))

RegEx Demo 2