var thousandComma = function(number) { var num = number.toString(); var pattern = /(-?\d+)(\d{3})/; while(pattern.test(num)) { num = num.replace(pattern, "$1,$2"); } return num; } console.log(thousandComma(1234567.89));在上例中,先定義一個正規表示式,如第4行,這個模式表示「一個字串中,如果未3碼為數字,且前面有一個或多個數字,就會和此模式匹配」。
在第6行中,第一次的
while
迴圈測試1234567.89
這個字串是否與pattern
匹配時,因為1234567
這一片段符合,所以結果是true
,跑到第8行時,對1234567.89
這個字串使用replace
函式時,會回傳1234,567.89
,其中$1
代表符合第一個(-?\d+)
的部份,也是就1234
,$2
代表符合第二個(\d{3})
的部份,就567
。
在第二次的
while
迴圈測試時,1234
這一片段仍然符合,會跑到第8行時,對1234567.89
這個字串,使用replace
函式時,1234,567.89
中的1234
會被替換成1,234
,整個字串變成1,234,567.89
。
在第三次的
while
迴圈測試時,因為已經沒有「未3碼為數字,且前面有一個或多個數字」的片段,此時就會回傳false
離開while
迴圈,上列的thousandComma(1234567.89)
就會回傳1,234,567.89
。
最後,要注意的是,上列第4行的第一個小括號中的
+
不能寫成*
,不然會造成無窮迴圈喔!