模式建议,以解决交替运营商的限制

时间:2014-12-13 17:46:53

标签: javascript regex

我正在尝试构建一个正则表达式模式匹配器。

完整的字符串模式如下:

AB123456C12
Letter A
Letter B
six digits
one letter
two digits.

我尝试尽可能匹配,但只要初始AB存在,就允许部分输入。 RegEx引擎是Javascript。希望完全跨浏览器兼容。

我确实有一个有效的模式:

^AB([0-9]{6}[A-Z][0-9]{0,2}|[0-9]{0,6})$

但它仅在alternation operator的参数处于此位置时有效。否则说,

^AB([0-9]{0,6}|[0-9]{6}[A-Z][0-9]{0,2})$

无法正常工作 - 这让我相信解决方案可能无法在某些模糊的浏览器中运行。

那么,还有其他任何定义该模式的方法吗?

感谢。

为清晰起见编辑:以下是正则表达式必须匹配的输入:

AB
AB123
AB123456Z

以下输入将被拒绝:

B
B123456Z12
ABC
123456

2 个答案:

答案 0 :(得分:1)

这可能会有所帮助

^AB[0-9]{6}[A-Z][0-9]{2}$

答案 1 :(得分:0)

我认为你正在寻找这个。

 #  ^AB(?:(?:[0-9]{6}(?:[A-Z][0-9]{0,2})?)|[0-9]{1,5})?$

 ^                             # BOS
 AB                            # AB
 (?:                           # Optional cl-1
      (?:                           # Required cl-2
           [0-9]{6}                      # Required 6 digits
           (?:                           # Optional cl-3   
                [A-Z]                         # Required A-Z letter
                [0-9]{0,2}                    # Required 0-2 (0 means optional)
           )?                            # End cl-3
      )                             # End cl-2
   |                              # or
      [0-9]{1,5}                    # Required 1-5 digits
 )?                            # End cl-1
 $                             # EOS