斯蒂芬大帝
我建议使用替代正则表达式,使用子组单独捕获参数的名称和值:function getUrlParams(url) { var re = /(?:\?|&(?:amp;)?)([^=]+)(?:=?([^]*))/g, match, params = {}, decode = function (s) {return decodeURIComponent(s.replace(/\+/g, " "));}; if (typeof url == "undefined") url = document.location.href; while (match = re.exec(url)) { params[decode(match[1])] = decode(match[2]); } return params;}var result = getUrlParams("http://maps.google.de/maps?f=q&source=s_q&hl=de&geocode=&q=Frankfurt+am+Main&sll=50.106047,8.679886&sspn=0.370369,0.833588&ie=UTF8&ll=50.116616,8.680573&spn=0.35972,0.833588&z=11&iwloc=addr");result 是一个对象:{ f:“q” 地理编码:“” hl:“de” 即:“UTF8” iwloc:“addr” ll:“50.116616,8.680573” 问:“美因河畔法兰克福” sll:“50.106047,8.679886” 来源:“s_q” spn:“0.35972,0.833588” sspn:“0.370369,0.833588” z:“11”}正则表达式分解如下:(?:#非捕获组 \?|&#“?” 要么 ”&” (?:放大器;)?#(对于错误的HTML编码的网址,请允许“&”))#end非捕获组(#组1 [^ =&#] +#除“=”,“&”或“#”之外的任何字符; 至少一次)#end end 1 - 这将是参数的名称(?:#非捕获组 =?#an“=”,可选 (#组2 [^&#] *#除“&”或“#”之外的任何字符; 任何次数 )#end end 2 - 这将是参数的值)#end非捕获组