// 千分位分割
"1234567890".replace(/\B(?=(?:\d{3})+(?!\d))/g, ',');

解析:

  1. 要理解 ?= ?: ?! ,需要先理解:前瞻、后顾、负前瞻、负后顾这四个概念

    // 前瞻:
    exp1(?=exp2) 查找exp2前面的exp1
    // 后顾:
    (?<=exp2)exp1 查找exp2后面的exp1
    // 负前瞻:
    exp1(?!exp2) 查找后面不是exp2的exp1
    // 负后顾:
    (?<!exp2)exp1 查找前面不是exp2的exp1
  2. \B 匹配非单词边界

上面正则可理解为:查找(3n个数字)+(1个非数字)组合前的非单词边界,如:
1 234 567 890 符合,替换后为:1,234567890

因为/g是全局替换,会继续匹配
12 345 678 90 不符合,因为678 这3个数字后面有1数字
...
1234 567 890 符合,替换后为: 1,234,567890
继续匹配直到全部匹配一遍,最后结果为:1,234,567,890


qice
18 声望0 粉丝

引用和评论

0 条评论