需求
对一个数字,进行千分位格式化
例如:1234567,格式化成:1,234,567
原理
从左向右检查数字,如果剩下的数字长度可以被3整除,则插入一个逗号
例如:
1. 先检查1,1后面有6位数字,则插入一个逗号
1. 再检查2,2后台5位数字,不能被3整除,跳过
正则表达式1
'1234567'.replace(/(\d)(?=(\d{3})+$)/g, '$1,')
原理为:查找数字,如果某一位满足“它后面的数字可以被3整除”,则把此数字替换为“数字本身,"
正则表达式2
'1234567'.replace(/\B(?=(\d{3})+$)/g, ',')
原理为:查找数字的边界,如果此边界满足“它后面的数字可以被2整除”,则把边界替换为”,"
小数
对于小数,”它后面的数字“ 意思要扩展为:到结尾的数字 或 到小数点的数字
把$改为($|\.),即可
'1234567.1234567'.replace(/(\d)(?=(\d{3})+($|\.))/g, '$1,')
此时,格式化结果如下
"1,234,567.1,234,567"
小数点后也有逗号。
拒绝格式化小数点后面的内容
加上(?<!\.\d*) 预检查,意思是只处理前面不能包含 ".数字"的内容
'1234567.1234567'.replace(/(?<!\.\d*)(\d)(?=(\d{3})+($|\.))/g, '$1,')