正则表达式返回未捕获的组而不是捕获

时间:2014-12-22 01:15:45

标签: javascript regex

我遇到了一个我似乎无法解决的奇怪问题...... 基本上,我有这个正则表达式返回我在捕获组中没有的东西,并且它不会返回实际捕获的组。这是正则表达式:

"localhost/a/b/c".match(/\/a\/b\/(.*?)/g);

据我所知,这应该返回["c"] ......但它会返回:

["/a/b/"]

我做错了什么?我认为被捕的团体应该被归还,而不是被忽视。

1 个答案:

答案 0 :(得分:6)

尝试:" localhost / a / b / c" .match(// a / b /(。+)/)[1]

在原始正则表达式"localhost/a/b/c".match(/\/a\/b\/(.*?)/g);

  • .表示任何字符
  • *表示前一个字符类匹配0 - 无限次
  • ?意味着匹配尽可能少的先前指定的字符,同时仍然匹配正则表达式的其余部分,但由于组之后没有任何内容,此组将有效捕获任何内容
  • 你似乎不需要这里的g修饰符,至少不需要这个例子。
  • 按照返回数组中的位置访问匹配组,其中[0]是完全匹配,[1]是第一个捕获组,等等...



$('#myDiv').append( "localhost/a/b/c".match(/\/a\/b\/(.+)/)[1] );

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="myDiv"><div>
&#13;
&#13;
&#13;