首页 > 解决方案 > 为什么我的正则表达式忽略每个匹配项中的最后一个字符

问题描述

下面的正则表达式可以正常工作,只是它忽略了每个匹配项中的最后一个字符。

\d{4}\b.*?(?=[^:]\d{4}(?! ml| kg)( [A-Za-z]{2}| \d{1}-| 1H-| [A-Za-z0-9],[A-Za-z0-9]| \D{1}-)|$)

我的问题是:如何将其更新为还包括每场比赛中的最后一个字符

下面是数据示例:
https ://regex101.com/r/XRlr4Q/1

标签: javascriptregex

解决方案


[^:]前瞻中的模式需要一个字符,而不是:在匹配的前四位数字之前。

您需要在(?<!:)那里使用lookbehind:

\d{4}\b.*?(?=(?<!:)\d{4}(?! ml| kg)(?: [A-Za-z]{2}| \d-| 1H-| [A-Za-z0-9],[A-Za-z0-9]| \D-)|$)

请参阅正则表达式演示


推荐阅读