JavaScript RegEx- |管道没有检查长度

时间:2014-05-19 23:27:48

标签: javascript regex

我正在检查3个表达式。喜欢3个电话号码的条件。如果有人匹配,那么通过。 当我单独写这些时,它运作良好。 但是当我把它们组合起来时,它并没有检查长度约束。

我正在使用|分开并与.match进行比较

var number_card = /^((4[38][0-9]{13}))|((6[0-9]{12}([0-9]{3})?))|((8[5-8][0-9]{14}))$/;

2 个答案:

答案 0 :(得分:2)

这里是你的正则表达式(以Python原始字符串形式):

number_card = re.compile(r"""
    # One from 3 global alternatives:
      ^                    # Either g1of3:
      (                    # $1: ...
        (4[38][0-9]{13})   # $2: ...
      )                    # End $1: ...
    | (                    # Or g2of3: $3: ...
        (                  # $4: ...
          6[0-9]{12}       #
          ([0-9]{3})?      # $5: Optional ...
        )                  # End $4: ...
      )                    # End $3: ...
    | (                    # Or g3of3: $6: ...
        (8[5-8][0-9]{14})  # $7: ...
      )                    # End $6: ...
      $                    # Anchor to end of line|string.
    """, re.VERBOSE)

如您所见,有三种全球替代方案。问题是^字符串起始锚点仅适用于第一个备选方案,而$字符串结束锚点仅适用于第三个备选方案。您需要在组内封装三个备选方案,以使锚点正常工作(再次以Python自由间隔模式):

number_card = re.compile(r"""
    ^                      # Anchor to start of line|string.
    (?:                    # One ... from 3 alternatives.
      (                    # Either a1of3 $1: ...
        (4[38][0-9]{13})   # $2: ...
      )                    # End $1: ...
    | (                    # Or a2of3 $3: ...
        (                  # $4: ...
          6[0-9]{12}       #
          ([0-9]{3})?      # $5: Optional ...
        )                  # End $4: ...
      )                    # End $3: ...
    | (                    # Or a3of3 $6: ...
        (8[5-8][0-9]{14})  # $7: ...
      )                    # End $6: ...
    )                      # End one ... from 3 alternatives.
    $                      # Anchor to end of line|string.
    """, re.VERBOSE)

这里是JavaScript RegExp文字语法:

var number_card = /^(?:((4[38][0-9]{13}))|((6[0-9]{12}([0-9]{3})?))|((8[5-8][0-9]{14})))$/;

请注意,此模式中有许多不必要的组可以删除。

答案 1 :(得分:0)

如果没有正则表达式,就无法确定问题所在。但是你可以用Regexper自己想象你的正则表达式,也许你自己找到一个解决方案。