每千位

时间:2019-03-04 00:45:14

标签: regex

这是测验练习

使用替代将逗号放在所有数字中以分隔成千上万。即:12345678→12,345,678。该数字可能在一个句子中,而该句子中可能有多个数字。

我尝试了代码

/(\d{3})(\d{3})/g

结果返回

  

测试6/19:100013541615681651应该变为100,013,541,615,681,651。您忘记了全局标志吗?

试过了

/\d(?=(?:\d{3})+(?!\d))/g

结果返回

  

测试14/19:您的正则表达式不正确地替换了以下字符串中的数字:您的凭单号为A87654

正则表达式demo

匹配的字符串

12345678901234567890

12345678

1234567

不匹配的字符串

A87654 

预期结果

123,456789,012345,67890

123,45678

123,4567

A87654 

enter image description here

参考

Matching Whole Lines of Text

2 个答案:

答案 0 :(得分:4)

先行重复3位数字,然后最终否定先行数字:

\d(?=(?:\d{3})+(?!\d))

并替换为

$0,

https://regex101.com/r/QAHt6E/5

答案 1 :(得分:1)

这是一个正则表达式,它也不会匹配与某些字母连接的数字:

(?=\b\d|\G)\d+?(?=(?:\d{3})+\b)

(?=\b\d|\G)是换行符和数字或前一场比赛的结尾的前瞻。 \d+?寻找最小位数,然后(?=(?:\d{3})+\b)断言至少要跟随一组3位数字,然后再换一个单词。正则表达式开头和结尾处的单词中断表示该单词不能与字母数字字符串中的数字匹配。

应将其替换为$0,,以便在数字中插入逗号。

Demo on regex101