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

需求

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

例如: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"

小数点后也有逗号。


拒绝格式化小数点后面的内容

加上(?

'1234567.1234567'.replace(/(?

你可能感兴趣的:(使用正则表达式格式化金额)