首先考虑最简单的情况–整数,如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次或一次。
由此,千位分割符即实现。