/\B(?=(?:\d{3})+$)/g 一條令人費解的正則表達式


網上瀏覽博客看到要用JavaScript正則表達式解決一個功能, 要在數字中間插入逗號, 用來表示書面的金額寫法.

JS代碼是這樣子的

let test1 = '1234567890' let format = test1.replace(/\B(?=(?:\d{3})+$)/g, ',')

 

里面那條正則表達式花了我一個下午去查資料, 算是補了下對於正則表達式認識上的一些漏洞, 記錄下來.

這里有幾個概念: 單詞邊界 和 非捕獲分組(non-capturing group)

\B 匹配非單詞邊界, 即兩邊都是單詞 \w = [0-9a-zA-Z] , 可是非單詞邊界太泛了, 我們需要一些限定詞.

?= 就是一個限定詞, 限定后面的字符串都是符合 (?:\d{3})+$  這個規則. 這里面最難理解的應該就是 ?: 這是一個非捕獲分組, 當匹配到 一個或多個 緊靠末尾 的三位數時, 這個規則生效, 但並不保存這個分組.

因此整個的意思就是, 我要匹配單詞之間的縫隙, 每個縫隙都在一個或多個 緊靠末尾 的三位數之間, 於是 12345678 匹配到的位置就會是 12 | 345 | 678. 

你可能會問, 123456789為什么不會匹配到第一個位置呢? 因為 \B 確保了這個縫隙只會位於兩個單詞\w之間.

以上就是全部的理解.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM