zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

2023-04-18 12:30:53 时间

首先,对于不清楚的标题感到抱歉,很难描述(并且出于同样的原因找到现有的解决方案)。具有多个匹配的全局正则表达式,其中分隔符应该在多个匹配中共享

我在JavaScript中使用这个表达式,在一个字符串来收集数字:

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

执行它"5358..2145"回报2场比赛,其中子匹配是"5358""2145"

但是,如果我用它"5358.2145",我只接收1场:"5358"

所以,我的理解是这样:

  • 第一场比赛被找到("5358."),所以点云在第一场比赛
  • 我想为第二场比赛是什么,因为这点已经属于第一场比赛
  • 不与字符串的开始或点之前

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

Alsatian

回答

使用在末端具有负先行:

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

参见regex demo

的模式匹配:

  • (?:^|D) - 串的任一开始(^)或任何非数字char(D
  • (d+) - 第1组:一个或多个数字
  • (?!d) - 如果当前位置右侧有一个数字,则负值预测失败。

非常好,我不知道lookadhead的概念。谢谢。 –

你可以看到[我的另一个答案](http://stackoverflow.com/questions/31201690/find-word-not-followed-by/31201710#31201710),看看负向预测如何工作。 –

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