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
// ]
不知道怎么修改正则表达式才能达到我的预期?
这张图可以说明为什么第一个组只匹配到了
com
,网站链接 https://regexper.com/#%2Fhttp...
如果想取得你需要的结果的话,需要7个匹配组去分别匹配对应项,感觉不如直接分割子字符串后再处理来的方便
补充:
http://www.regular-expression... 这篇文章很好的解释了为什么贪婪匹配组(也就是
(\w+\.?)+
)为什么只保留了最后的com