如果我有数字 22345678
我想得到一个 3 的数字 block ,我想得到 ['22','345','678']
。使用以下正则表达式
/(\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));
最佳答案
匹配后跟长度为 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
关于Javascript 改进正则表达式以匹配 3 的数字 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38794600/