比如:href="http://www.mofier.com?name=abc&sex=1&age=12";
想提取出name,abc,sex,1,age,12。最好能直接提取而不需要进一步分解操作
现在我只写出: 
   var reg = /[\?|&](.+?)={1,1}(.+?)[&]/ig;
   var match = reg.exec(href);
   只能提取出第一个参数对:name,abc,其他的参数对无法取到。
请高手帮我啊,我已经没分了,最多20分

解决方案 »

  1.   

    var url="http://www.mofier.com?name=abc&sex=1&age=12";
    var param=url.substring(url.indexOf("?")+1)
                 .split("&");
    var temp,map={};
    for(var i=0,len=param.length;i<len;i++){
        temp=param[i].split("=");
        map[temp[0]]=temp[1];
    }alert(map.name);
      

  2.   

    可以先splice拆分,再截取,和String的方法一样
      

  3.   


    str="http://www.mofier.com?name=abc&sex=1&age=12";
    alert(str.substring(str.indexOf('?') + 1).split('&').join('=').split('='));
      

  4.   

    1楼的方法是可以实现,但是这不符合我的目标。我自己实现过这个截取url参数的方法,不过用的是正则算法来做,之所以要改成用正则表达式来实现,是为了减少代码量。
    1楼的方法会使得效率低于用正则表达式。
    1.用url.indexOf方法,这是一次字符串操作
    2.用substring方法,这是一次字符串操作
    3.循环里面,有个split方法,这是n此字符串操作(n是数组单元的个数)
    以上总共的字符串操作有2+n。我封装这个是作为我的js操作的底层,很讲究效率,我现在用的正则算法是只有1次字符串操作,就能把所有的参数对提取完毕。
      

  5.   


    var getArgs=function() {
        var params=document.location.search.substr(1),reg=/(?:^|&)(.*?)=(.*?)(?:&|$)/g,temp,args={};
        while((temp=reg.exec(params))!=null) {
            reg.lastIndex-=1;
            args[temp[1]]=temp[2];
        }
        return args;
    };
    alert(getArgs().name);
    //测试链接:<a href="?name=abc&sex=1&age=12">ttttt</a>
      

  6.   

    function queryString(item) {
        var searchStr = location.search;
        var svalue = searchStr.match(new RegExp("[\?\&]" + item + "=([^\&]*)(\&?)", "i"));
        return svalue ? svalue[1] : svalue;
    }
      

  7.   

    这么小的数据量不用正则应该也没问题的
    <script>
    (function(){
    var url="http://www.mofier.com?name=abc&sex=1&age=12&gender=male&height=&weight=30";
    var search=url.substring(url.indexOf("?")+1);
    var reg=/(.+?)=(.*?)(&|$)/g;
    var params={};

    while(reg.exec(search)){
     params[RegExp.$1]=RegExp.$2||"";  
    }

    for(var i in params){
       alert(i+":"+params[i]);
    }
    })();
    </script>
      

  8.   

    function query_params(url)
    {
      var url_params = /(\w+(?=\=))|((\w+)(?=\&|\s))/g;

      return url.match(url_params+' ');
    }
    alert(query_params('http://www.mofier.com?name=abc&sex=1&age=12').join(','));
      

  9.   

    PERL:
    $var=~m/((?<=[\?&]).*?(?=&)|(?<=&).*)/g
    ?<=[\?&]   #肯定逆序环视,左边存在&或者?则匹配成功。
    .*?        #忽略有限,匹配任意字符。
    ?=&        #肯定顺序环视,右边存在&字符时匹配成功。上面能匹配完除最后一组数据之外的所有数据。因为最后一组数据后面没有字符&所以另写?<=&       #肯定逆序环视,左边存在&则匹配成功。
    .*         #匹配优先,匹配任意字符。这里利用两个多选组进行完全匹配,首先是匹配第一个选项,这样可以匹配除最后一组数据之外的所有数据,第二个选项可以匹配最后一组数据。