使用正则表达式对字符串的相同部分进行两次匹配和分组?

Jos*_*sey 3 javascript regex

用单词来解释这一点非常困难,所以也许我可以展示我想要的东西。

目前,我有以下代码:

  const regex = /(\d?\s\+?\s\d)|(\d?\s\-?\s\d)/g
  const match = '1 + 2 - 7'.match(regex)
  console.log(match)
Run Code Online (Sandbox Code Playgroud)

这将返回两个匹配项:

[ "1 + 2", " - 7" ]
Run Code Online (Sandbox Code Playgroud)

现在,我想知道的是,是否可以创建一个可以匹配整数2两次并将其作为两个结果一部分的正则表达式模式?

所需输出

[ "1 + 2", "2 - 7" ]
Run Code Online (Sandbox Code Playgroud)

The*_*ird 6

您可以使用正向前瞻的捕获组并使用字符类 [+-]来匹配+-

(?=(\d+ [+-] \d+))
Run Code Online (Sandbox Code Playgroud)

图案零件

  • (?= 积极向前看,断言右边是
    • ( 捕获组1
      • \d+ [+-] \d+ 匹配1+位数字,空格,+或-,空格和1+位数字
    • ) 封闭组
  • ) 提前关闭

正则表达式演示

请注意,这\s还将匹配换行符。