这段每4个数字加一个逗号的正则该怎么理解?

作者站长头像
站长
· 阅读数 7
    var num='123456789'
    var str=num.replace(/(?=(\d{4})+$)/g,',')
    console.log('======str',str);// 1,2345,6789

上述代码可以给每4个数字加一个逗号,但是这正则该怎么理解呢?因为我的理解结果是1234,5678,9但实际正则在替换时,似乎是从右向左每4个判断一次,让我很疑惑

回复
1个回答
avatar
test
2024-06-26

是从前往后查的,可以把正则的全局模式去掉实验下:

const num='123456789'
const str=num.replace(/(?=(\d{4})+$)/,',')
console.log(str) // 1,23456789

/(?=(\d{4})+$)/g 匹配的位置是第1位(数字2的位置,后面有8个连续数字)和第5位(数字6的位置后面4个连续数字)。所以会在数字2和数字6的位置用逗号替换后面的数字,同时因为有前瞻断言不会消耗字符,相当于在2和6的位置插入了逗号。answer image

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容