RegExp获取url参数

需求
获取 url 中的参数

  1. 指定参数名称,返回该参数的值 或者 空字符串
  2. 不指定参数名称,返回全部的参数对象 或者 {}
  3. 如果存在多个同名参数,则返回数组

IN

http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe

OUT

[1, 2, 3]

解析

  • 注意indexOf,push方法的返回值
  • 用split,slice等js方法处理字符串
  • 正则匹配RegExp分组捕获
  • concat产生一个副本数组,reg.exec(),常量子捕获RegExp.$n

解法1

function getUrlParam(sUrl, sKey) {
    var s = sUrl,
        o = {}

    // 范围
    var q = s.indexOf('?') > -1 ? s.slice(s.indexOf('?') + 1) : ''
    q = q.indexOf('#') > -1 ? q.slice(0, q.indexOf('#')) : q

    // 组装
    if (q) {
        var brr = q.split('&'),
            e
        for (var i in brr) {
            e = brr[i].split('=')

            if (o[e[0]]) {
                o[e[0]].push(e[1])
            } else {
                o[e[0]] = [e[1]]
            }
        }
        // 格式化
        for (var i in o) {
            o[i] = o[i].length == 1 ? o[i][0] : o[i]
        }
    }

    return sKey ? (o[sKey] ? o[sKey] : '') : o

}

浓缩版

function getUrlParam(sUrl, sKey) {
    var obj = {};
    var reg = /[?&](\w+)=(\w+)/g;
    while (reg.exec(sUrl))
        // concat产生一个新的副本不会改变原有的值域
        obj[RegExp.$1] ? obj[RegExp.$1] = [].concat(obj[RegExp.$1], RegExp.$2) : obj[RegExp.$1] = RegExp.$2;
    return sKey ? obj[sKey] || "" : obj;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值