具有多个匹配的全局正则表达式,其中分隔符应在多个匹配中共享

时间:2017-04-13 13:28:33

标签: regex

首先,对于不明确的标题感到抱歉,很难描述(并且出于同样的原因找到现有的解决方案)。

我在Javascript中使用这个正则表达式来收集字符串中的数字:

/(?:^|[^\d])([\d]+)(?:$|[^\d])/g

"5358..2145"上执行此操作会返回2个匹配项,其中子匹配为"5358""2145"

但如果我在"5358.2145"上使用它,我只会收到一个匹配:"5358"

所以,我明白了:

  • 找到第一个匹配项("5358."),以便第一场比赛进入第一场比赛
  • 我想要的第二场比赛前面没有字符串的开头或点,因为这一点已经属于第一场比赛

如何更改模式以查找用1个非数字字符分隔的所有数字?

1 个答案:

答案 0 :(得分:1)

最后使用否定前瞻:

/(?:^|\D)(\d+)(?!\d)/g

请参阅regex demo

模式匹配:

  • (?:^|\D) - 字符串开头(^)或任何非数字字符(\D
  • (\d+) - 第1组:一个或多个数字
  • (?!\d) - 如果当前位置右侧有一位数字,那么负面预测就会失败。