两个正则搞定数字增加千分符

原创
前端路迹
2019-4-26 11:31
编辑于 2022-6-17 15:35

使用 Number 原生方法可以轻松实现。

但是也存在问题,比如上图中的第二个和第三个数只保留了三位小数,原来 toLocaleString 小数超过三位会四舍五入,所以如果你没有多位小数顾虑,那么可以直接使用,否则只能寻找别的方法了。另外 toLocaleString 是很早就有的内置方法,不用担心兼容性问题。

之前在网上找到一个目前来讲最简洁有效方法,两个正则就搞定。

function addThousandSeparator(num) {
    return num.toString().replace(/^(-?)(\d+)(\.?\d*)$/, function(num, minus, integer, decimal) {
        return minus + integer.replace(/\B(?=(\d{3})+(?!\d))/g, ',') + decimal
    })
}

下面分析下这两个正则是如何搞定的。

第一个正则^(-?)(\d+)(\.?\d*)$分析:

第一个正则没啥难度,第二个正则才是核心。一般在第一个正则的基础上对第二组整数部分用字符串截取的方式也可以搞定,但是如果用一个正则就可以搞定,逼格一下子就上来了。

第二个正则/\B(?=(\d{3})+(?!\d))/分析:

下面用一个实例更加直观的讲述上面的匹配过程,以数字 123456789 为例。

使用 match 方法,可以看到匹配了三个空字符串也就是三个位置。

转载请注明出处。本文地址: https://www.qinshenxue.com/article/2019-04-26-11-31-21.html
关注我的公众号