动态

详情 返回 返回

一個複雜的正則分享 - 动态 详情

// 千分位分割
"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

Add a new 评论

Some HTML is okay.