使用正则表达式实现功能
请使用正则表达式实现方法 numSplit,为任意数字添加千分位分隔符,注意参数校验
例如:
numSplit(1234567.1234) // 结果 1,234,567.1234
实现:
function numSplit(num) {
let reg = /(?<!\.\d*)\B(?=(\d{3})+(?!\d))/g
return (num + '').replace(reg, ',')
}
var n = 1234567.1234
console.log(numSplit(n))
解析:
?!
?=
?<!
查看 断言部分
边界参考 正则表达式 边界:\b 和 \B*
拆分正则:
/.(?!\d)/
断言:匹配后面不是数字的字符
/(\d{3})+/
匹配数字个数是3的倍数的字符串(贪婪模式:尽可能匹配长的)
/.(?=abc)/
断言:匹配后面是abc的字符
/\B/
匹配非单词边界
断言的内容,不会被作为结果返回,即只用于匹配规则,不会被replace替换
组合以上4个正则:
/\B(?=(\d{3})+(?!\d))/
匹配一个边界,边界后面是(数字个数是3的倍数的字符串,该字符串后面是一个非数字的字符)
这个正则可以替换整数数字,如果是数字有小数部分,则同样会为小数部分增加逗号
继续改进,在前面增加规则,前面的内容不能包含小数点.
/(?<!\.\d*)\B(?=(\d{3})+(?!\d))/