使用正则后行断言匹配两目标间不含指定词的文本 捕获组不全问题求助
正则匹配捕获不全问题解决方案
问题根因
你当前使用的正则捕获内容不全,核心原因是((?!\b(the|an?|another)\b).)*部分的捕获组写在了量词*的内侧:每次匹配单个符合规则的字符时,都会覆盖上一次该捕获组的存储结果,最终仅能保留中间修饰部分的最后一个字符,无法拿到完整的无冠词修饰内容。
修正后的正则
优化后的正则如下,新增了i修饰符省去大小写匹配的冗余写法,同时将不需要单独捕获的分组改为非捕获组减少性能损耗:/\b(([Tt]he|[Aa]n|[Aa]|[Aa]nother)\b((?:(?!\b(?:the|an?|another)\b).)*))\b(cat|apple)\b/gi
捕获组对应内容
针对匹配结果The small cat,各捕获组返回值如下:
- 第0组(完整匹配):
The small cat - 第1组:冠词加中间修饰词的完整前缀
The small - 第2组:匹配到的冠词
The - 第3组:中间无冠词的修饰部分
small - 第4组:目标名词
cat
如果你不需要单独拆分冠词、修饰部分等内容,直接取第0组即可得到完整的匹配结果。
内容的提问来源于stack exchange,提问作者Steve Bolton
相关产品推荐
相关产品推荐

