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