我遇到了一个奇怪的问题,似乎无法解决... 基本上,我的正则表达式返回了我没有捕获组的内容,而没有返回实际捕获的组。以下是正则表达式:
"localhost/a/b/c".match(/\/a\/b\/(.*?)/g);
据我所知,这应该返回
["c"]
,但实际返回的是:["/a/b/"]
我做错了什么?我以为捕获组应该被返回,而不是被忽略。
我遇到了一个奇怪的问题,似乎无法解决... 基本上,我的正则表达式返回了我没有捕获组的内容,而没有返回实际捕获的组。以下是正则表达式:
"localhost/a/b/c".match(/\/a\/b\/(.*?)/g);
["c"]
,但实际返回的是:["/a/b/"]
"localhost/a/b/c".match(/\/a\/b\/(.*?)/g);
:
.
表示任何字符*
表示前一个字符类匹配0-无限次?
表示尽可能少地匹配之前指定的字符,同时仍然匹配剩余的正则表达式,但由于组后面没有任何内容,因此该组将不会捕获任何内容g
修饰符。$('#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>
(.+)
可以工作,而(.*?)
不能?它们都是捕获组,对吗? - user3117575+
表示匹配一个或多个字符,而 *
表示匹配零个或多个字符。但更重要的是,如果在 *
后面紧跟着 ?
,并且在该组后没有更多的匹配要求,则会导致捕获组根本不捕获任何字符。请参见我上面的编辑。 - Wesley Smith(.*?)$
,使用$
来匹配字符串的末尾。虽然如此,他是正确的;.*
将匹配任何字符“0次或多次”,而+
将匹配它“1次或多次”。 - Makaze
/g
修饰符和缺少$
锚点。 - Ja͢ck