首页 新闻 赞助 找找看

string.replace(reg,function(match,pos,originText){})参数解释

0
悬赏园豆:10 [已解决问题] 解决于 2016-04-30 13:36
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');

结果显示参数并不是解释的参数

小kk06的主页 小kk06 | 初学一级 | 园豆:56
提问于:2016-04-29 12:56
< >
分享
最佳答案
1

["1","2","3"]

收获园豆:10
jello chen | 大侠五级 |园豆:7306 | 2016-04-29 13:32

输出的结果并不是按照函数中参数解释那样第一个是match 第二个是偏移量 第三个是原字符串

小kk06 | 园豆:56 (初学一级) | 2016-04-29 15:02

@小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] || '';
            }
        }
jello chen | 园豆:7306 (大侠五级) | 2016-04-29 15:18

@小kk06: match是匹配子串,p1,p2代表捕获组,即$1,$2,offset代表匹配位置,originText代表被匹配的原字符串

jello chen | 园豆:7306 (大侠五级) | 2016-04-29 15:45

@jello chen: 捕获项那个概念没有弄清楚 现在差不多明白了 谢啦

小kk06 | 园豆:56 (初学一级) | 2016-04-30 13:37

@小kk06: 捕获组意思在匹配的过程中会先将()这种组所捕获的值存到$1,$2...,然后再将正则中命名组(?<>)接着排$n...,然后你就可以通过$n来引用了,上面的p1,p2对应的就是$1,$2

jello chen | 园豆:7306 (大侠五级) | 2016-04-30 14:09

@jello chen: 嗯嗯 我懂了

小kk06 | 园豆:56 (初学一级) | 2016-04-30 14:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册