千位分隔符js正则实现

首先考虑最简单的情况–整数,如123456789,只需考虑字符串从最后一位往前考虑存在3n个数字,且不包括第一位字符,代码如下

1
2
3
4
5
  function addComma(num){
return num && num.toString()
.replace(/(\d)(?=(\d{3})+$)/g,'$1,')
}
console.log(addComma(1234567890));//1,234,567,890

  其中(/d)保证3n个字符前存在一个数字,并且可以捕获到该数字,则在该数字后面加上,即可。(?=exp)代表匹配exp前面的位置,所以捕获到的数字与(/d)相同。exp+代表匹配exp一次或多次。$/代表匹配字符串的结束。
  然后考虑更复杂一点的情况–小数,如1234567890.123456,这时需要取到数字的起始位到小数点之间的部分,利用^-?\d+实现,代码如下

1
2
3
4
5
6
7
  function addComma(num){
return num && num.toString()
.replace(/^-?\d+/,function(m){
return m.replace(/(\d)(?=(\d{3})+$)/g,'$1,')
})
}
console.log(addComma(1234567890.123456));//1,234,567,890.123456

其中\^匹配字符串的开头。-?代表匹配-号0次或一次。
由此,千位分割符即实现。