const formatter = (num) => {
const reg = /^\d*$/
if(!reg.test(num)){
throw '输入内容有误!请输入数字'
}else{
return String(num).replace(/\d{1,3}(?=(\d{3})+(\.|$))/g,'$&,')
}
}
var str = formatter(1234567)
console.log('str', str)
答案是有了,诸位有木有思考过这个正则的意义呢?
科普一下:
上述正则表达式分析:
\d{1, 3}
\d :代表匹配数字字符串
{1, 3} : 代表1 - 3位字符串
/d{1, 3} : 代表匹配到字符串为1-3位的,比如 : '123', '12345', 'w123'
?=
这个规则就高级那么点点了,查文档你会发现它的定义是:正向肯定预查(look ahead positive assert),在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,"Windows(?=95|98|NT|2000)"能匹配"Windows2000"中的"Windows",但不能匹配"Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
+ 匹配一次或者多次
\. 这里是匹配小数点,因为前面加了转义字符(\)
| 或者
$ 匹配输入字符串的结束位置
$& 与 regexp 相匹配的子串
再将正则可视化一下吧! 网站 正则可视化
最后用自己的话理解:
\d{1, 3} 匹配1-3位的数字,但是后面必须还得接着 “多个以三位数字为一组”的字符串,以数字三位数字结尾或者小数点结尾,匹配成功了,就在匹配到的字符串后面加上逗号。
各位道友意觉如何呀,欢迎指导!
参考: