處理數值,爲每三位數加一個逗號,兼容浮點型數值正則表達式
以1234567.1234
和 12345678
爲例code
function addComma(num = 0){ let temps = num.toString().split('.'), //處理浮點數的狀況,整數時會返回原數值 target = temps[0].split('').reverse(), //倒序 lastIndex = target.length; return target.map((item,index) => { //第三個就增長一個',',要注意最後一個數字不添加 return ((index+1) % 3 === 0 && (index !== lastIndex - 1)) ? (','+ item) : item; }) .reverse() //倒序回來 .join('') + (temps[1] ? '.' + temps[1] : ''); //若是是浮點數,就再加上小數部分 } addComma(1234567.1234) //1,234,567.1234 addComma(12345678) //12,345,678
function addComma(num = 0){ let reg = num.toString().indexOf('.') > -1 ? /(\d)(?=(\d{3})+\.)/g : /(\d)(?=(\d{3})+$)/g; return num.toString().replace(reg,'$1,'); } addComma(1234567.1234) //1,234,567.1234 addComma(12345678) //12,345,678
利用正則表達式來處理的思路:字符串
右邊的部分很好匹配:/(\d{3})+/
, 再加上開始算的符號,浮點數要加上 \.
(.
匹配除換行符以外的任何單個字符,加上\.
轉義,就是匹配'.')。整數加上$
結束符。get
左邊的部分,必須依賴於右邊的部分。好比說必須右邊有三位,左邊纔會匹配成功,加一個','。就須要用到?=
正向確定查找(x(?=y)
僅當x後面跟着y時纔會匹配x)。(\d)(?=y)
y就是右邊的部分。it
再加上全局搜索的標誌 g
,否則只會匹配一組,只加一個','。io