Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';我的正则表达式中的非捕获组有什么问题_Javascript_Regex - Fatal编程技术网

Javascript 什么';我的正则表达式中的非捕获组有什么问题

Javascript 什么';我的正则表达式中的非捕获组有什么问题,javascript,regex,Javascript,Regex,我正在尝试编写一个正则表达式,它将匹配与以下字符串类似的字符串: 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}以匹配最后的两个或三个字符 从我所读到的,这应该

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

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}
-这看起来像是意外添加,这是您的正则表达式没有:

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

(.*?[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})

您能再分享一些您期望的匹配项和非匹配项吗?(显然)很难知道你期望什么工作。我编辑了我的问题,将我的样本包括在正则表达式测试仪中。我试图匹配这两个字符串,但我不清楚为什么我不匹配。谢谢。我很确定它不匹配,因为您的非捕获组在NC组之后再次复制。我猜这是个错误。删除它,它就可以正常工作。@Mutuelinvestor您的正则表达式无法匹配字符串,因为它与我在回答中详细介绍的模式不匹配。
a-Z
是不是在
[\dA-Za-Z]{1,3}
中输入错误?否则,它将无法按预期工作。第一个[AWMS\d]是非捕获组的一部分。我用第二个来匹配,不是吗?或者我不了解非捕获组是如何工作的。我以为那是什么?由于非捕获组的原因,将匹配到第一个字符串中的MS。然后我从那里匹配。在你的模式中,你只需要一次。如果您使用一个常规的捕获组,它将捕获这两个字母/数字以及整个模式(),但您根本不需要捕获/NC组,因为方括号可以很好地完成这一任务。要解释你的正则表达式(没有NC/C组)的功能,我不能与成功争辩,谢谢。我错了吗?非捕获组不捕获。非捕获组不捕获。但如果在捕获组中,NC组的内容仍将在父捕获组中捕获。谢谢您的演示效果很好,但它没有使用非捕获组。我需要使用一个,因为这只是一个更大的正则表达式的一部分。我的理解是,非捕获组不匹配。因此,第二个[AWMS\d]{2}将匹配MA,[A-Z]{2}将匹配BE,[\dA-Za-Z]{1,3}将匹配26。@Mutuelinvestor yes,
[A-Z]{2}
将匹配BE和AQ。捕获部分由字符串左右两端的
()
括号控制。所有匹配并在这些括号内的内容都将被“捕获”并从正则表达式返回。如果您必须在该组中有第二组括号
()
,并且不希望返回两次(因为它是另一个捕获组),则此时您应该使用非捕获组对其求反。他们仍然在整个团队中被捕获。在你的情况下,你根本不需要一个内部团体。
(.*?[AWMS\d]{2}[A-Z]{2}[\dA-Za-z]{1,3})