使用正则表达式格式化金额

需求

对一个数字,进行千分位格式化

例如: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,')

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容