正则表达式中的非捕获组未按预期工作

时间:2016-10-13 16:11:20

标签: regex

尝试编写一个简单的正则表达式以匹配以下任一格式:XX-XXXXXX-XX-XX-XXXX-XXXXXX-XX-XX-XX-XX其中X是数字(0-9)或字母字符(不区分大小写)

我测试了以下表达式:

/[0-9A-Za-z]{2}-[0-9A-Za-z]{6}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}(?:-[0-9A-Za-z]{2})/

最终-XX是非捕获组。

我正在尝试对以下条目进行测试:

0F-F5G67E-H4-j6-j7
0F-F5G67E-H4-j6-j7-8J

但是,它只匹配第二个。

以下是测试链接:http://regexr.com/3eebe

如果有任何专业人士可以伸出援手,我将不胜感激。

由于

4 个答案:

答案 0 :(得分:1)

你忘了添加? (意思是"零或一次")在你的小组/[0-9A-Za-z]{2}-[0-9A-Za-z]{6}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}(?:-[0-9A-Za-z]{2})?/

之后

另外,添加g标志以匹配测试环境中的两个组。

最后,为什么不将最后三个组合在一起:/[\w]{2}-[\w]{6}(?:-[\w]{2}){3,4}/g

答案 1 :(得分:0)

通过在末尾添加?将该组标记为可选:

/[0-9A-Za-z]{2}-[0-9A-Za-z]{6}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}(?:-[0-9A-Za-z]{2})?/  

答案 2 :(得分:0)

下次您可以使用量词{3,4}

[0-9A-Za-z]{2}-[0-9A-Za-z]{6}(?:-[0-9A-Za-z]{2}){3,4}

查看Online

答案 3 :(得分:0)

您在非捕获组后面缺少?,因此请添加?并设置g标记

[0-9A-Za-z]{2}-[0-9A-Za-z]{6}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}-[0-9A-Za-z]{2}(?:-[0-9A-Za-z]{2})?