1234567890.012.replace(/\d(?=(?:\d{3})+\b)/g, '$&,')
查找以\d為開頭,以\b為結束(即"."的前面,這點我是到最后面才理解到的),中間
至少出現一次\d{3}的匹配
紅色是開頭\d,灰色是\d{3}+
第一次匹配到
1
234567890.012
第二次匹配到1234567890.012
第三次匹配到1234567890.012
然后在匹配到的數字后面加個',',
變成
1,2
34,567,890
.012
但是這里有幾個難點要理解?=、?:和\b
?=是正向預匹配,即不會讓?=后面的內容被匹配出來,這里的作用是不讓\d{3}+被替換掉
?:
是非捕獲性匹配,它使匹配不緩存起來,這點我要另起文章寫,去掉了也不影響正確結果
\b是單詞分界符,這個才是重點,去掉了會變成
1,2,
3,4,5,6,7,890
.012
因為少了\b限定,它不會以"."作結束標志,試理解下\d(?=\d{3}+),只要滿足開頭有一個\d后面至少有一個\d{3},它會這樣匹配:
第一次:
1
234567890.
012
第二次:1234567890.012
第三次:123
456789
0.012
第四次:1234567890.012
第五次:1234567890.012
第六次:1234567890.012
第七次:1234567890.012
然后在匹配到的數字后面加個',',
變成1,2,3,4,5,6,7,890.012
把\b換成\.也是可行的
