function getUrlParam(sUrl, sKey) { var result={}; sUrl.replace(/\??(\w+)=(\w+)&?/g,function(match,pos,originText){ console.log(match); console.log(pos); console.log(originText); if(result[pos] !== void 0){ var t = result[pos]; result[pos] = [].concat(t,originText); }else{ result[pos] = originText; } }); if(sKey === void 0){ return result; }else{ return result[sKey] || ''; } } getUrlParam('?key=1&key=2&key=3&test=4#hehe', 'key');
结果显示参数并不是解释的参数
["1","2","3"]
输出的结果并不是按照函数中参数解释那样第一个是match 第二个是偏移量 第三个是原字符串
@小kk06:
function getUrlParam(sUrl, sKey) { var result = {}; sUrl.replace(/\??(\w+)=(\w+)&?/g, function (match, p1, p2, offset, originText) { console.log(match); console.log(p1); console.log(p2); if (result[p1] !== void 0) { var t = result[p1]; result[p1] = [].concat(t, p2); } else { result[p1] = p2; } }); if (sKey === void 0) { return result; } else { return result[sKey] || ''; } }
@小kk06: match是匹配子串,p1,p2代表捕获组,即$1,$2,offset代表匹配位置,originText代表被匹配的原字符串
@jello chen: 捕获项那个概念没有弄清楚 现在差不多明白了 谢啦
@小kk06: 捕获组意思在匹配的过程中会先将()这种组所捕获的值存到$1,$2...,然后再将正则中命名组(?<>)接着排$n...,然后你就可以通过$n来引用了,上面的p1,p2对应的就是$1,$2
@jello chen: 嗯嗯 我懂了