正则表达式中的非捕获组有什么问题?

What's wrong with the non capture group in my regular expression

本文关键字:什么 问题 正则表达式      更新时间:2023-09-26

我正在尝试编写一个正则表达式,将匹配类似于下面的字符串:

Yu MSBE26
w AWAQBNL

我正在使用Javascript,并提出了以下正则表达式:

(.*?(?:[AWMS'd]{2})[AWMS'd]{2}[A-Z]{2}['dA-Za-z]{1,3})

换句话说,我通过匹配所有内容来开始捕获组,直到遇到[AWMS'd]{2}模式,然后匹配[AWMS'd]{2}模式,随后匹配[A-Z]{2},最后匹配['dA-Za-z]{1,3}以匹配最后的两个或三个字符。

从我所读到的,这应该是工作,但我没有得到任何匹配。

例如,当我使用正则表达式测试我没有得到任何匹配:样本

删除第二个[AWMS'd]{2} -它看起来像一个意外的添加,是你的regex不工作的原因:

(.*?(?:[AWMS'd]{2})[A-Z]{2}['dA-Za-z]{1,3})

编辑:你甚至不需要非捕获组,方括号就足够了:

(.*?[AWMS'd]{2}[A-Z]{2}['dA-Za-z]{1,3})

你的正则表达式不匹配你的值,因为它们根本不匹配。

你的模式是:

(.*?(?:[AWMS'd]{2})[AWMS'd]{2}[A-Z]{2}['dA-Za-z]{1,3})
Yu MSBE26
     ^--- fails here
w AWAQBNL
     ^--- fails here

顺便说一句,你可以使用你的正则表达式来匹配你的字符串,像这样:

(.*?[AWMS'd]{2}[A-Z]{2}['dA-Za-z]{1,3})
演示工作