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

Gon*_*bia 3 javascript regex

我想,如果我可以举例来说,如果我有多少拿到3的数块22345678我想['22','345','678'].使用以下正则表达式

/(\d{1,3})(?=(\d{3})+(?!\d))/g
Run Code Online (Sandbox Code Playgroud)

我明白了 ['22','345']

任何人都可以帮助我提高我的正则表达式?

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

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

Pra*_*lan 5

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

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

正则表达式在这里解释.

正则表达式可视化


您可以避免捕获组,因为它没有必要.

/\d{1,3}(?=(?:\d{3})+$|$)/g
//---------^^^-------------
Run Code Online (Sandbox Code Playgroud)

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

/\d{1,3}(?=(\d{3})*$)/g
Run Code Online (Sandbox Code Playgroud)

  • 这与`/\d {1,3}(?=(\ d {3})*$)/ g`不一样吗? (2认同)