博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三种方法实现:获取 url 中的参数
阅读量:4087 次
发布时间:2019-05-25

本文共 1884 字,大约阅读时间需要 6 分钟。

获取 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;}复制代码

此处注明正则:/(\w+)=(\w+)/g

MDN RegExp exec 方法API:

测试:

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)复制代码

控制台输出结果如图:

AC!!!

作者:立志搬砖造福生活
链接:https://juejin.im/post/5b84bff9f265da437e4d86c9
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的文章
CentOS操作系统下安装yum的方法
查看>>
FTP 常见问题
查看>>
zookeeper单机集群安装
查看>>
do_generic_file_read()函数
查看>>
Python学习笔记之数据类型
查看>>
Python学习笔记之特点
查看>>
shell 快捷键
查看>>
VIM滚屏操作
查看>>
将file文件内容转成字符串
查看>>
springcloud 的eureka服务注册demo
查看>>
eureka-client.properties文件配置
查看>>
MODULE_DEVICE_TABLE的理解
查看>>
platform_device与platform_driver
查看>>
platform_driver平台驱动注册和注销过程(下)
查看>>
.net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
查看>>
c# 如何调用win8自带的屏幕键盘(非osk.exe)
查看>>
build/envsetup.sh 简介
查看>>
linux怎么切换到root里面?
查看>>
安装alien,DEB与RPM互换
查看>>
编译Android4.0源码时常见错误及解决办法
查看>>