匹配捕获组或在 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)$
我正在尝试获取一个数字 (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)$