【javaScript】三种方法实现:获取 url 中的参数

题目来源(在线编辑):www.nowcoder.com/practice/a3…(牛客网)

题目要求:

获取 url 中的参数

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

解一:使用字符串拼接匹配字符

/*  获取URl中的参数
* @para url 
* @para key 参数名*/
function getUrlParam(sUrl, sKey) {
    var left= sUrl.indexOf("?") + 1
    var right= sUrl.lastIndexOf("#")
    var parasString = sUrl.slice(left, right)
    var paras = parasString.split('&');
    var parasjson = {}
    paras.forEach(function (value, index, arr) {
        var a = value.split('=');
        parasjson[a[0]] !== undefined ? parasjson[a[0]] = [].concat(parasjson[a[0]], a[1]) : parasjson[a[0]] = a[1];
    });

    let result = arguments[1] !== void 0 ? (parasjson[arguments[1]] || '') : parasjson;
    return result
}

解二:使用正则表达式匹配字符,并使用正则Replace方法替换

function getUrlParam2(sUrl, sKey) {
    var result, Oparam = {};
    sUrl.replace(/[\?&]?(\w+)=(\w+)/g, function ($0, $1, $2) 
        console.log('$0:' + $0 + "     $1:" + $1 + "     $2:" + $2);
        Oparam[$1] === void 0 ? Oparam[$1] = $2 : Oparam[$1] = [].concat(Oparam[$1], $2);
    });
    sKey === void 0 || sKey === '' ? result = Oparam : result = Oparam[sKey] || '';
    return result;
}

此处注明正则:/[\?&]?(\w+)=(\w+)/g
(使用Regexper在线工具将正则转成可视化的图形,简单易懂)

正则图形化在线工具

在这里插入图片描述

解三:使用正则表达式匹配字符,并使用正则Exec方法进行组装

function getUrlParam3(sUrl, sKey) {
    var resObj = {};
    var reg = /(\w+)=(\w+)/g;
    while (reg.exec(sUrl)) {
        resObj[RegExp.$1] ? resObj[RegExp.$1] = [].concat(resObj[RegExp.$1], RegExp.$2) : resObj[RegExp.$1] = RegExp.$2;
    }
    if (sKey) {
        return (resObj[sKey] ? resObj[sKey] : '');
    }
    return resObj;
}

此处的正则RegExp:/(\w+)=(\w+)/g
在这里插入图片描述

测试:

let url = 'http://www.nowcoder.com?key=1&key=2&key=3&test=4#hehe'
let result = getUrlParam(url)
let result2 = getUrlParam(url, 'key')
console.log(result)
console.log(result2)

控制台输出结果如图:

在这里插入图片描述

原文链接:https://juejin.im/post/5b84bff9f265da437e4d86c9
来源:掘金

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值