zl程序教程

您现在的位置是:首页 >  其他

当前栏目

通过正则格式化url查询字符串实现代码

代码 实现 查询 字符串 通过 url 格式化 正则
2023-06-13 09:14:43 时间
看到项目里通过js数组split方法格式化查询字符串的,突发奇想为什么不能用正则呢,性能如何?于是便有了如下代码:
复制代码代码如下:

varurl="www.baidu.com?a=123&b=456&c=789&e=dfsdfsdfsdfsdfsdfsdf&f=46545454545454785&g=e23232dsfvdfvdf";
/**
*格式化查询字符串(正则实现)
*@paramurlurl地址
*@return{Object}格式化的json对象
*/
functionformatUrl(url){
varreg=/(?:[?&]+)([^&]+)=([^&]+)/g;
vardata={};
functionfn(str,pro,value){
data[decodeURIComponent(pro)]=decodeURIComponent(value);
}
url.replace(reg,fn);
returndata;
}
/**
*格式化查询字符串(数组实现)
*@paramurlurl地址
*@return{Object}格式化的json对象
*/
functionformatUrl2(url){
url=url.replace(/.*\?/,"");
varargs={},
items=url.length?url.split("&"):[]
,item=null
,i=0
,len=items.length;
for(i=0;i<items.length;i++){
item=items[i].split("=");
args[decodeURIComponent(item[0])]=decodeURIComponent(item[1]);
}
returnargs;
}
varstartTime=newDate();
for(vari=0;i<1000000;i++){
formatUrl2(url);
}
console.log("formatUrl2",(newDate()-startTime));//formatUrl212138
startTime=newDate();
for(vari=0;i<1000000;i++){
formatUrl(url);
}
console.log("formatUrl",(newDate()-startTime));//formatUrl12537

测试浏览器是chrme25;正则实现的函数居然比数组实现的函数要慢(泪奔....)。不过还好,在重复执行一百万次的情况下只慢0.4秒