• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
晔耶耶耶
博客园    首页    新随笔    联系   管理    订阅  订阅
获取 url 参数

题目描述

获取 url 中的参数
1. 指定参数名称,返回该参数的值 或者 空字符串
2. 不指定参数名称,返回全部的参数对象 或者 {}
3. 如果存在多个同名参数,则返回数组
输入例子:
getUrlParam('http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe', 'key')
输出例子:
[1, 2, 3]

大神的代码:
function getUrlParam(sUrl,sKey){
    var result = {};
    sUrl.replace(/\??(\w+)=(\w+)&?/g,function(a,k,v){
        if(result[k] !== void 0){
            var t = result[k];
            result[k] = [].concat(t,v);
        }else{
            result[k] = v;
        }
    });
    if(sKey === void 0){
        return result;
    }else{
        return result[sKey] || '';
    }
}

需要好好看看正则表达式的replace用法。

a,v,k : a,模式的匹配项;k,第一个捕获组的匹配项;v,第二个捕获组的匹配项;

          第一个参数a是整个匹配的字符串,接下来依次是正则里面的分组(就是括号括起来为一组);

          ECMAScript v3 规定,replace() 方法的参数 replacement 可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数 是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。

          void 0 是 undefined.

          通过采用void 0取undefined比采用字面上的undefined更靠谱更安全,应该优先采用void 0这种方式。

 

function getUrlParam(sUrl, sKey) 
{
    var param = sUrl.split('#')[0].split('?')[1];//第一个split的意思是将sUrl以#为边界分割,[0]是指前面的字符串
                                                 //第二个split的意思是将前一个分割出来的字符串以?为边界分割,[1]是后面的字符串
    if(sKey)//指定参数名
    {
        var strs = param.split('&');
        var arrs = new Array();//新建一个数组
        var len = strs.length;
        for(var i=0;i<len;i++)
            {
                var tmp = strs[i].split('=');
                if(tmp[0]==sKey)
                    {
                        arrs.push(tmp[1]);
                    }
            }
        if (arrs.length == 1){
            return arrs[0];
        }else if (arrs.length == 0){
            return "";
        }else{
            return arrs;
        } 
    }
    else//不指定参数名
    {
        if (param ==undefined||param=="")
            return{};//返回空
        else 
            {
                var strs = param.split('&');
                var arrObj = new Object();
                var len = strs.length;
                for(var i=0;i<len;i++)
                    {
                        var tmp = strs[i].split('=');//tmp[0]是参数
                        if(!(tmp[0] in arrObj))
                            {
                                arrObj[tmp[0]]=[];
                            }
                        arrObj[tmp[0]].push(tmp[1]);//每个参数都有一个数组,里面存放着该参数的值
                    }
                return arrObj;//返回全部的参数对象
            }
    }
}

 JS中split的用法:W3School的讲解

 

 

posted on 2016-09-01 16:58  晔耶耶耶  阅读(177)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3