網上瀏覽博客看到要用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之間.
以上就是全部的理解.