Javascript改进正则表达式以匹配3的数字块

时间:2016-08-05 17:13:35

标签: javascript regex

如果我可以通过示例获得数字22345678我希望得到['22','345','678'],我想获得3个数字块。使用以下正则表达式

/(\d{1,3})(?=(\d{3})+(?!\d))/g

我得到['22','345']

任何人都可以帮我改进我的正则表达式吗?

这里的一个例子 - > https://regex101.com/r/cF6rN4/1 和这篇文章的片段

console.log('22345678'.match(/(\d{1,3})(?=(\d{3})+(?!\d))/g));

1 个答案:

答案 0 :(得分:5)

匹配字符串,后面跟着长度为3的乘数或最后的数字。



console.log('22345678'.match(/\d{1,3}(?=(\d{3})+$|$)/g));




Regex explanation here.

Regular expression visualization

您可以避开捕获组,因为它不是必需的。

/\d{1,3}(?=(?:\d{3})+$|$)/g
//---------^^^-------------

更新:使用*0或更多重复)代替+1或更多,可以更加简化重复)有助于避免管道符号。作为 @torazaburo 的评论,(\d{3})*$(\d{3})+$|$都是等效的。

/\d{1,3}(?=(\d{3})*$)/g