正则表达式javascript - 匹配或

时间:2013-08-15 15:34:53

标签: javascript regex

使用javascript和.match()可以简化此正则表达式吗? 我想匹配由连字符分隔的5x5或3x5块的字母数字代码。

例如我想匹配:

123EF-12B45-123H5-A2CGE-A2345

54321-ABCDE-F2345

到目前为止,我尝试(\w{5}-){4}\w{5}匹配第一个示例,(\w{5}-){2}\w{5}匹配第二个示例。有没有办法匹配或?我尝试将|组合起来,但它只匹配3对。

或者为每种模式运行正则表达式.match()两次更好吗?

4 个答案:

答案 0 :(得分:2)

您可以使用

^(\w{5}-){2}\w{5}((-\w{5}){2})?$

(\w{5}-){2}\w{5}与3x5案例匹配,并且可选择再增加两个块,这将是5x5案例。

或者你可以使用

^(\w{5}-){2}((\w{5}-){2})?\w{5}$

即。把可选块放在两者之间,或者表达式的简单组合:

^((\w{5}-){4}\w{5})|(\w{5}-){2}\w{5})$

答案 1 :(得分:1)

您可以尝试使用连字符的块指定范围:

(\w{5}-){2,4}\w{5}

这(不幸或不幸)也将匹配4 x 5块,i。

54321-ABCDE-F2345-ABF45

答案 2 :(得分:1)

(\w{5}-){2}\w{5}|(\w{5}-){4}\w{5}

交替|将首先尝试匹配左子表达式,当失败时它会尝试正确的表达式。当左边的一个包含正确的一个时,它将永远不会与正确的一个相匹配。在你的情况下,即使有更多,它将只停留在三个组。试着简单地交换它们:

(\w{5}-){4}\w{5}|(\w{5}-){2}\w{5}

您也可以将它们组合成一个:

((\w{5}-){4}|(\w{5}-){2})\w{5}
(\w{5}-){2}((\w{5}-){2})?\w{5}

答案 3 :(得分:1)

这种方式对我有用:

"123EF-12B45-123H5-A2CGE-A2345".match(/(\w{5}-){4}\w{5}|(\w{5}-){2}\w{5}/)
=> ["123EF-12B45-123H5-A2CGE-A2345", "A2CGE-", undefined]

"123EF-12B45-123H5".match(/(\w{5}-){4}\w{5}|(\w{5}-){2}\w{5}/)
=> ["123EF-12B45-123H5", undefined, "12B45-"]