Javascript Regex返回未捕获的组而不是捕获的组
我遇到了一个奇怪的问题,我似乎无法回避。。。 基本上,我有一个正则表达式,它返回我在捕获组中没有的东西,而不是返回实际捕获的组。以下是正则表达式:Javascript Regex返回未捕获的组而不是捕获的组,javascript,regex,Javascript,Regex,我遇到了一个奇怪的问题,我似乎无法回避。。。 基本上,我有一个正则表达式,它返回我在捕获组中没有的东西,而不是返回实际捕获的组。以下是正则表达式: "localhost/a/b/c".match(/\/a\/b\/(.*?)/g); 据我所知,这应该返回[“c”]。。。但它的回报是: ["/a/b/"] 我做错了什么?我认为捕获的组应该被返回,而不是被忽略。尝试:“localhost/a/b/c”。匹配(//a/b/(.+)/)[1] 在原始正则表达式中,匹配(/\/a\/b\/(.*)/g
"localhost/a/b/c".match(/\/a\/b\/(.*?)/g);
据我所知,这应该返回[“c”]
。。。但它的回报是:
["/a/b/"]
我做错了什么?我认为捕获的组应该被返回,而不是被忽略。尝试:“localhost/a/b/c”。匹配(//a/b/(.+)/)[1]
在原始正则表达式中,匹配(/\/a\/b\/(.*)/g)代码>
表示任何字符
表示上一个字符类匹配了0-无限次*
意味着尽可能少地匹配先前指定的字符,同时仍然匹配正则表达式的其余部分,但由于组后面没有任何内容,因此该组将有效地不捕获任何内容?
- 您似乎不需要这里的
修饰符,至少在本例中不需要g
- 按匹配组在返回数组中的位置访问匹配组,其中[0]是完全匹配,[1]是第一个捕获组,等等
$('#myDiv').append(“localhost/a/b/c”.match(/\/a\/b\/(.+)/)[1])代码>
谢谢,为什么(.+)
有效,而(.*)
无效?它们都是捕获组,对吗?因为+
表示匹配字符匹配1次或多次,而*
表示匹配字符匹配0次或多次。但更重要的是,后面有*
?
,并且组后没有更多匹配要求将导致您的捕获组根本无法捕获任何字符。请参见上面的“我的编辑”。您还可以使用(.*?)$
,使用$
匹配字符串的结尾。不过,他是对的*
将匹配任何字符0次或更多次,而+
将匹配它1次或更多次。@Makaze,谢谢。似乎我还需要学习一些关于Regex的知识,因为它的价值,regexbuddy()帮助了我很多。很高兴能在你制作的过程中看到regex正在做什么。大概20美元左右,但很值得。这里的问题是/g
修饰符和缺少的$
锚。