博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
日常代码优化系列:(一)获取url参数
阅读量:4592 次
发布时间:2019-06-09

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

最近刷牛客网的时候,看到某大神写的 获取url参数 的简洁写法,正则用的那叫一个6,顿时心生敬佩,赶紧来学习膜拜一下~~

题目描述:获取 url 中的参数

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] || '';    }}

1、getUrlParam 函数接收两个参数,分别是 surl 和 指定的参数名称(可能为空)。

2、声明一个空的对象,用来存放字符串中的 参数名:参数值;

3、使用 string 的 replace 方法,需要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,第二个参数为函数,那么这个方法将被多次调用,每次匹配都会被调用,否则只在第一次会调用。

str.replace(regexp|substr, newSubStr|function)sUrl.replace(/\??(\w+)=(\w+)&?/g,function(a,k,v){...}) // 在surl中查找匹配 /\??(\w+)=(\w+)&?/g 的字符串 a,其中第一个(\w+)捕获组的匹配项为 k;第二个(\w+)捕获组的匹配项为 v。
以 'https://www.baidu.com/?Id=1&name=hqq&name=gb'为例:   第一次匹配结果为:a='?Id=1&' , k='Id' , v='1'   第二次匹配结果为:a='name=hqq&' , k='name' , v='hqq'   第三次匹配结果为:a='name=gb' , k='name' , v='gb' 由于正则使用了全局匹配模式,所以每次匹配都会调用后面的匿名函数。
if(result[k] != void 0){ // 目的是判断 result[k]是否为 undefined,不直接使用undefined的原因是,undefined 有可能会被修改,而 void 0 返回的值永远都是 undefined    var t = result[k]; // 将 result 中 key 为 k 的 值赋给 t    result[k] = [].concat(t,v);// 如果参数名称 k 已存在,将对应的参数值1,与传入的参数值2合并成一个数组,返回给result[k]即可 }

 

 

转载于:https://www.cnblogs.com/CassieHouse/p/9674667.html

你可能感兴趣的文章
请让本题永远沉睡于此(东方化改题+给的标程)
查看>>
第二第三周暑期集训总结
查看>>
C#屏幕截图
查看>>
JQuery模仿a标签的点击事件
查看>>
github hexo 搭建博客
查看>>
JS调用百度地图API获取地理位置
查看>>
BZOJ 1103 [POI2007]大都市meg(树状数组+dfs序)
查看>>
BZOJ 4260 Codechef REBXOR(字典树)
查看>>
idea使用maven逆向mybitis的文件
查看>>
宿舍助手app——个人工作第二天
查看>>
线段树(hdu 2795)
查看>>
David Sankoff 介绍学习链接
查看>>
当连续进行多个请求,并且请求的url地址相同时。放弃前面的所有请求,只执行最后一次请求。...
查看>>
[IIS]安装及使用
查看>>
[Tizen开发]基于Tizen平台的终端开发模拟器1 - Web
查看>>
Html::a 生成 method=post
查看>>
hbase知识
查看>>
ReactNative--state
查看>>
从别人的博客学习
查看>>
spring4的新特性---泛型注入
查看>>