匹配捕获组或在Javascript正则表达式中丢失时失败匹配
我试图抓取一个数字(匹配捕获组或在Javascript正则表达式中丢失时失败匹配,javascript,regex,regex-greedy,Javascript,Regex,Regex Greedy,我试图抓取一个数字(5),然后是一个可能的-或(空格),然后是一个3位数的序列,最后是一个位数。如果第一组完全不匹配,则只返回其他数字序列 ^(5\-? ?)?(\d{3})(\d)$ 在我看来,这是正确的,不会抛出任何错误,但它返回了5: "5489" -> ()("548")("9") 我不希望这个表达式返回与这个模式匹配的结果 因此,快速搜索让我看到了占有欲表达和许多关于你前任的文章。从我所阅读的内容来看,这似乎应该有效: ^(5\-? ?)?+(\d{3})(\d)$ 但是J
5
),然后是一个可能的-
或
(空格),然后是一个3位数的序列,最后是一个位数。如果第一组完全不匹配,则只返回其他数字序列
^(5\-? ?)?(\d{3})(\d)$
在我看来,这是正确的,不会抛出任何错误,但它返回了5
:
"5489" -> ()("548")("9")
我不希望这个表达式返回与这个模式匹配的结果
因此,快速搜索让我看到了占有欲表达和许多关于你前任的文章。从我所阅读的内容来看,这似乎应该有效:
^(5\-? ?)?+(\d{3})(\d)$
但是Javascript并不像正则表达式那样
有没有办法在Javascript中创建贪婪的所有格捕获组,或者在这种情况下进行模拟?如果您查看文档,就会发现不支持所有格量词
你可以用
^(?!5\d{3}$)(5-? ?)?(\d{3})(\d)$
看。(?!5\d{3}$)
如果字符串以5
开头,然后有3位数字,则反向前瞻将立即导致匹配失败
详细信息:
-字符串的开头^
-当前位置右侧不能有(?!5\d{3}$)
,然后是3位数字和字符串结尾5
-一个可选的(5-?)?
序列,然后是一个可选的5
,然后是一个可选的空格-
-3位数字(\d{3})
-一位数字(\d)
-字符串结束$
^(?!5\d{3}$)(5-? ?)?(\d{3})(\d)$
看。(?!5\d{3}$)
如果字符串以5
开头,然后有3位数字,则反向前瞻将立即导致匹配失败
详细信息:
-字符串的开头^
-当前位置右侧不能有(?!5\d{3}$)
,然后是3位数字和字符串结尾5
-一个可选的(5-?)?
序列,然后是一个可选的5
,然后是一个可选的空格-
-3位数字(\d{3})
-一位数字(\d)
-字符串结束$
^(?=(...))\1
正则表达式:
^(?=((5\-? ?)?))\1(\d{3})(\d)$
您可以通过利用环顾性质来模拟所有格量词功能:
^(?=(...))\1
正则表达式:
^(?=((5\-? ?)?))\1(\d{3})(\d)$
JS中没有所有格数量?+//code>如果你看一下文档,你会发现它不支持所有格量词。如果它不是5,那么这个
^(5 \-?)((!5)\d{3})(\d)$
试试看。如果字符串以5
开头,然后有3位数字,它将立即失败匹配。@RandyHall-没有理由强制执行任何操作。您在末尾有固定数量的数字要匹配,而且您正在使用锚定^$
。结论是,如果只有4个数字,那么它们将在最后匹配,因为这是正则表达式设计的一个特例。如果您不想匹配以5
开头的4位数字,那么这是一个额外的断言,但与强制捕获第一个组无关。我只是将此作为一个评论,因为这是一个X/Y问题,我不想无缘无故地发布。JS?+
中没有所有格量词。如果你看一下文档,你会发现它不支持所有格量词。如果它不是5,那么这个^(5\-?)((!5)\d{3}(\d)$
试试看。如果字符串以5
开头,然后有3位数字,它将立即失败匹配。@RandyHall-没有理由强制执行任何操作。您在末尾有固定数量的数字要匹配,而且您正在使用锚定^$
。结论是,如果只有4个数字,那么它们将在最后匹配,因为这是正则表达式设计的一个特例。如果您不想匹配以5
开头的4位数字,那么这是一个额外的断言,但与强制捕获第一个组无关。我只是说这是一个评论,因为这是一个X/Y问题,我不想无缘无故地发布。+1我认为这是更好的答案。第一,它模拟所有格,第二,它不会匹配5890
,但会匹配55890
+1我认为这是更好的答案。第一,它模拟所有格,第二,它不会匹配5890
,但会匹配55890
。