js正则表达式实现每三位数字加一个逗号

代码

const formatNum = (num) => (num || 0).toString().replace(/\d(?=(\d{3})+\b)/g, '$&,')

解析

看完代码是不是一脸懵逼,别急,我们只要把 ?=$& 弄明白(\d 等不会的话查查 mdn 即可),这个表达式也就能看懂了。
先看个简单的吧,$& 表示整个用于匹配的原字符串,也就是说匹配到啥,它就代表啥。如果正则表达式匹配到 ‘abc’,那么 $& 就代表 ‘abc’,简单吧?
那剩下的 ?= ,我们看看 mdn
在这里插入图片描述

(?:x)
匹配’x’仅仅当’x’后面跟着’y’.这种叫做先行断言。
例如,/Jack(?=Sprat)/会匹配到’Jack’仅当它后面跟着’Sprat’。/Jack(?=Sprat|Frost)/匹配‘Jack’仅当它后面跟着’Sprat’或者是‘Frost’。但是‘Sprat’和‘Frost’都不是匹配结果的一部分。

看个两遍就能懂了

那还有个问题,/\d(?=(\d{3})+\b)/g 到底匹配到的是什么呢?我们拿 123456789 来做匹配,那么它匹配到的就是数字 36

为什么呢?我们来看看这个表达式,首先 \b 代表匹配一个数字,?= 代表数字后面需要跟着 (\d{3})+\b(1到多串 3个连着的数字,并以一个三数字为边界),所以 3 后面跟着 456789,两串 3个连着的数字;6 后面跟着 789,一串 3个连着的数字。

最后,通过 replace 给匹配到的 36 的后面都加上逗号,即可。

废话至此,希望能帮到你。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值