关于正则表达式的限定符“+”捕获的问题,为什么只匹配到了最后一个?
var url = "http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe";
var pattern = /https?:\/\/(\w+\.?)+\?(\w+=\w+&?)+#\w+/;
var result = pattern.exec(url);
// [
// 0: "http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe",
// 1: "com",
// 2: "test=4",
// groups: undefined
// index: 0,
// input: "http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe",
// length: 3
// ]
console.log(result);
想知道为什么 (\w+\.?)
只匹配到了 com
,(\w+=\w+&?)
只匹配到了 test=4
?
我的预期是:
// [
// 0: "http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe",
// 1: "www.",
// 2: "nowcoder.",
// 3: "com",
// 4: "key=1",
// 5: "key=2",
// 6: "key=3",
// 7: "test=4",
// groups: undefined
// index: 0,
// input: "http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe",
// length: 3
// ]
不知道怎么修改正则表达式才能达到我的预期?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这张图可以说明为什么第一个组只匹配到了
com
,网站链接 https://regexper.com/#%2Fhttp...
如果想取得你需要的结果的话,需要7个匹配组去分别匹配对应项,感觉不如直接分割子字符串后再处理来的方便
补充:
http://www.regular-expression... 这篇文章很好的解释了为什么贪婪匹配组(也就是
(\w+\.?)+
)为什么只保留了最后的com
因为\w 等价于'[A-Za-z0-9_]'.
(\w+.?)中的.? 表示可以匹配0个.字符,.?表示只匹配0-1个点字符,并且你加了括号,应该这导致了你匹配到了.com