如果我可以通过示例获得数字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));
答案 0 :(得分:5)
匹配字符串,后面跟着长度为3的乘数或最后的数字。
console.log('22345678'.match(/\d{1,3}(?=(\d{3})+$|$)/g));

您可以避开捕获组,因为它不是必需的。
/\d{1,3}(?=(?:\d{3})+$|$)/g
//---------^^^-------------
更新:使用*
(0
或更多重复)代替+
(1
或更多,可以更加简化重复)有助于避免管道符号。作为 @torazaburo 的评论,(\d{3})*$
和(\d{3})+$|$
都是等效的。
/\d{1,3}(?=(\d{3})*$)/g