正则参考答案:
var a = 123456789;
String(a).replace(/\B(?=(\d{3})+(?!\d))/g, ",")
正则表达式拆解
1. 基础知识
-
x(?=y)
【先行断言】匹配“x”仅仅当“x”后面跟着“y”
例如: /Java(?=Script)/
Java开头的语言有很多我只认识JavaScript
-
x(?!y)
【反向否定查找】仅仅当“x”后面不跟着“y”时匹配“x”
例如:/Java(?!Script)/
Java开头的语言有很多我就不喜欢JavaScript
2. 正则拆解
- 第一步:
\B
匹配非单词边界
- 第二步:
?=(\d{3})
匹配后面跟3个数字字符的位置,/+/
表示匹配到底,此时定位到789
- 第三步:加
“ , ”
,此时123456789
=>123456,789
- 第四步:
?!\d
匹配定位到123456,
- 第五步:
/**/g
表示会递归匹配,继续对123456
进行操作上述动作
其他
- 正则没有从右到左匹配的方法
- 用字符串+数组方法实现的话记得反转字符串
- JS内置
toLocaleString
方法可直接实现,但存在兼容问题
- 前置判断必须大于999才操作