如果正则表达式的所有组都是可选的,我怎么能不捕获空组?

时间:2018-03-13 23:57:52

标签: javascript regex regex-group regex-greedy

我匹配的子匹配。

考虑一下这个例子:

(\d{1,3})?(?:-(\d{1,3}))?

如果我用任何字符串运行它,我会得到一个空的匹配。

如何确保没有空匹配?

1 个答案:

答案 0 :(得分:0)

一种方法是,如果您要匹配子字符串,则使用替换 这增加了一个额外的组,你需要处理的事情。

(\d{1,3})(?:-(\d{1,3}))?|-(\d{1,3})

每种选择都必须匹配。

    ( \d{1,3} )                   # (1)
    (?:
         -
         ( \d{1,3} )                   # (2)
    )?
 |  
    -
    ( \d{1,3} )                   # (3)

如果您不想重复这些群组,可以使用断言。

(?=-?\d)(\d{1,3})?(?:-(\d{1,3}))?

然后就变成了这个

 (?= -? \d )
 ( \d{1,3} )?                  # (1)
 (?:
      -
      ( \d{1,3} )                   # (2)
 )?