正则表达式类题目

使用正则表达式实现功能

请使用正则表达式实现方法 numSplit,为任意数字添加千分位分隔符,注意参数校验

例如:

numSplit(1234567.1234) // 结果 1,234,567.1234

实现:

function numSplit(num) {
  let reg = /(?<!\.\d*)\B(?=(\d{3})+(?!\d))/g
  return (num + '').replace(reg, ',')
}

var n = 1234567.1234
console.log(numSplit(n))

解析:

?! ?= ?<! 查看 断言部分

边界参考 正则表达式 边界:\b 和 \B*

拆分正则:

/.(?!\d)/ 断言:匹配后面不是数字的字符
/(\d{3})+/ 匹配数字个数是3的倍数的字符串(贪婪模式:尽可能匹配长的)
/.(?=abc)/ 断言:匹配后面是abc的字符
/\B/ 匹配非单词边界

断言的内容,不会被作为结果返回,即只用于匹配规则,不会被replace替换

组合以上4个正则:
/\B(?=(\d{3})+(?!\d))/ 匹配一个边界,边界后面是(数字个数是3的倍数的字符串,该字符串后面是一个非数字的字符)

这个正则可以替换整数数字,如果是数字有小数部分,则同样会为小数部分增加逗号

继续改进,在前面增加规则,前面的内容不能包含小数点.
/(?<!\.\d*)\B(?=(\d{3})+(?!\d))/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值