使用正则匹配主要用到了正向确定预查 (?=pattern), 这个group不会被匹配结果获取 关于正向预查javascript
整数和小数的匹配规则上是不同的。html
const numberToKilobitSeparator = targetNum => {
let reg;
if (/[^\d\.]/.test(targetNum)) return targetNum;
reg = /\./.test(targetNum)
? /(\d{1,3})(?=(\d{3})+\.\d+)/g
: /(\d{1,3})(?=(\d{3})+$)/g;
return targetNum.toString().replace(reg, '$&,')
}
numberToKilobitSeparator(12345678) // '12,345,678'
numberToKilobitSeparator(12345678.2345) // '12,345,678.2345'
复制代码
实际上咱们只对整数部分进行分割,因此咱们能够先匹配出来整数而后再单独对整数进行处理。java
const numberToKilobitSeparator = targetNum => {
if (/[^\d\.]/.test(targetNum)) return targetNum;
return targetNum
.toString()
.replace(/\d+/,
int => int.replace(/(\d{1,3})(?=(\d{3})+$)/g, '$&,'))
}
numberToKilobitSeparator(12345678) // '12,345,678'
numberToKilobitSeparator(12345678.2345) // '12,345,678.2345'
复制代码
const numberToKilobitSeparator = targetNum.toLocalString() => {
if (/[^\d\.]/.test(targetNum)) return targetNum;
return targetNum.toLocalString()
}
numberToKilobitSeparator(12345678) // '12,345,678'
numberToKilobitSeparator(12345678.2345) // '12,345,678.2345'
复制代码
在实际工做中咱们能够根据需求来选择使用哪种方法来实现,总的来讲最后一种是最方便的,不过要考虑到ie低版本的兼容问题。通常在面试中可能会有用正则去实现的要求,咱们也应该适当熟悉。spa