通過正則格式化url查詢字符串實現(xiàn)代碼
更新時間:2012年12月28日 18:15:32 作者:
看到項目里通過js數(shù)組split方法格式化查詢字符串的,突發(fā)奇想為什么不能用正則呢,性能如何?感興趣的朋友可以研究下哦
看到項目里通過js數(shù)組split方法格式化查詢字符串的,突發(fā)奇想為什么不能用正則呢,性能如何?于是便有了如下代碼:
var url='www.baidu.com?a=123&b=456&c=789&e=dfsdfsdfsdfsdfsdfsdf&f=46545454545454785&g=e23232dsfvdfvdf';
/**
* 格式化查詢字符串(正則實現(xiàn))
* @param url url地址
* @return {Object} 格式化的json對象
*/
function formatUrl(url){
var reg=/(?:[?&]+)([^&]+)=([^&]+)/g;
var data={};
function fn(str,pro,value){
data[decodeURIComponent(pro)]=decodeURIComponent(value);
}
url.replace(reg,fn);
return data;
}
/**
* 格式化查詢字符串(數(shù)組實現(xiàn))
* @param url url地址
* @return {Object} 格式化的json對象
*/
function formatUrl2(url){
url=url.replace(/.*\?/,'');
var args={},
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]);
}
return args;
}
var startTime=new Date();
for(var i=0;i<1000000;i++){
formatUrl2(url);
}
console.log('formatUrl2',(new Date()-startTime)); //formatUrl2 12138
startTime=new Date();
for(var i=0;i<1000000;i++){
formatUrl(url);
}
console.log('formatUrl',(new Date()-startTime)); //formatUrl 12537
測試瀏覽器是chrme 25;正則實現(xiàn)的函數(shù)居然比數(shù)組實現(xiàn)的函數(shù)要慢(淚奔....)。不過還好,在重復執(zhí)行一百萬次的情況下只慢0.4秒
復制代碼 代碼如下:
var url='www.baidu.com?a=123&b=456&c=789&e=dfsdfsdfsdfsdfsdfsdf&f=46545454545454785&g=e23232dsfvdfvdf';
/**
* 格式化查詢字符串(正則實現(xiàn))
* @param url url地址
* @return {Object} 格式化的json對象
*/
function formatUrl(url){
var reg=/(?:[?&]+)([^&]+)=([^&]+)/g;
var data={};
function fn(str,pro,value){
data[decodeURIComponent(pro)]=decodeURIComponent(value);
}
url.replace(reg,fn);
return data;
}
/**
* 格式化查詢字符串(數(shù)組實現(xiàn))
* @param url url地址
* @return {Object} 格式化的json對象
*/
function formatUrl2(url){
url=url.replace(/.*\?/,'');
var args={},
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]);
}
return args;
}
var startTime=new Date();
for(var i=0;i<1000000;i++){
formatUrl2(url);
}
console.log('formatUrl2',(new Date()-startTime)); //formatUrl2 12138
startTime=new Date();
for(var i=0;i<1000000;i++){
formatUrl(url);
}
console.log('formatUrl',(new Date()-startTime)); //formatUrl 12537
測試瀏覽器是chrme 25;正則實現(xiàn)的函數(shù)居然比數(shù)組實現(xiàn)的函數(shù)要慢(淚奔....)。不過還好,在重復執(zhí)行一百萬次的情況下只慢0.4秒
您可能感興趣的文章:
- asp.net獲取URL和IP地址的方法匯總
- ASP.NET中的URL過濾實現(xiàn)代碼
- js中escape對應的C#解碼函數(shù) UrlDecode
- js分解url參數(shù)(面向?qū)ο?極簡主義法應用)
- Asp.net中Request.Url的各個屬性對應的意義介紹
- js URL參數(shù)的拼接方法比較
- ASP.NET jQuery 實例10 動態(tài)修改hyperlink的URL值
- 從URL中提取參數(shù)與將對象轉(zhuǎn)換為URL查詢參數(shù)的實現(xiàn)代碼
- 關于URL中的特殊符號使用介紹
- js中將URL中的參數(shù)提取出來作為對象的實現(xiàn)代碼
- URL中去除指定參數(shù)實現(xiàn)C#代碼
相關文章
Iframe 自適應高度并實時監(jiān)控高度變化的js代碼
不得不用到iframe,且被強烈要求不能讓它出現(xiàn)滾動條!嵌入的頁面肯定是高度不一的,頁面中也不能出現(xiàn)大片空白,所以也不能寫死高度!真是麻鬼煩啊!2009-10-10