Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
匹配捕获组或在Javascript正则表达式中丢失时失败匹配_Javascript_Regex_Regex Greedy - Fatal编程技术网

匹配捕获组或在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}$)
    -当前位置右侧不能有
    5
    ,然后是3位数字和字符串结尾
  • (5-?)?
    -一个可选的
    5
    序列,然后是一个可选的
    -
    ,然后是一个可选的空格
  • (\d{3})
    -3位数字
  • (\d)
    -一位数字
  • $
    -字符串结束
如果你看一下文档,你会发现不支持所有格量词

你可以用

^(?!5\d{3}$)(5-? ?)?(\d{3})(\d)$
看。
(?!5\d{3}$)
如果字符串以
5
开头,然后有3位数字,则反向前瞻将立即导致匹配失败

详细信息

  • ^
    -字符串的开头
  • (?!5\d{3}$)
    -当前位置右侧不能有
    5
    ,然后是3位数字和字符串结尾
  • (5-?)?
    -一个可选的
    5
    序列,然后是一个可选的
    -
    ,然后是一个可选的空格
  • (\d{3})
    -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