// 千分位分割
"1234567890".replace(/\B(?=(?:\d{3})+(?!\d))/g, ',');
解析:
-
要理解 ?= ?: ?! ,需要先理解:前瞻、後顧、負前瞻、負後顧這四個概念
// 前瞻: exp1(?=exp2) 查找exp2前面的exp1 // 後顧: (?<=exp2)exp1 查找exp2後面的exp1 // 負前瞻: exp1(?!exp2) 查找後面不是exp2的exp1 // 負後顧: (?<!exp2)exp1 查找前面不是exp2的exp1 - \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