匹配捕获组或在 Javascript 正则表达式中丢失时匹配失败

Matching a capturing group or failng the match if missing in Javascript regex

我正在尝试获取一个数字 (5),然后是一个可能的 -</code> (space) 进行一系列操作3 位数字,最后是一位数字。如果第一组根本不匹配,那么只有 return 其他数字序列。</p> <pre><code>^(5\-? ?)?(\d{3})(\d)$

这对我来说是正确的,不会引发任何错误,但它会返回 5

"5489" -> ()("548")("9")

我实际上不希望这个表达式 return 匹配这个模式。

所以快速搜索让我找到了所有格表达和很多关于你前任的文章。根据我正在阅读的内容,这看起来应该有效:

^(5\-? ?)?+(\d{3})(\d)$

但是 Javascript 不像 那样作为正则表达式。

有没有办法在Javascript中做一个贪婪的所有格捕获组,或者在这种情况下模拟它?

如果您查看 ECMAScript 5 文档,您会发现不支持所有格量​​词。

您可以使用

^(?!5\d{3}$)(5-? ?)?(\d{3})(\d)$

regex demo。如果字符串以 5 开头,然后有 3 个数字,(?!5\d{3}$) negative lookahead 将立即失败匹配。

详情:

  • ^ - 字符串开头
  • (?!5\d{3}$) - 不能有 5 然后 3 位数字和字符串的结尾紧靠当前位置的右侧
  • (5-? ?)? - 5 的可选序列,然后是可选的 -,然后是可选的 space
  • (\d{3}) - 3 位数
  • (\d) - 一位数
  • $ - 字符串结尾。

您可以利用环视特性来模拟所有格量词功能:

^(?=(...))

正则表达式:

^(?=((5\-? ?)?))(\d{3})(\d)$

Live demo