看到專案裡透過js數組split方法格式化查詢字串的,突發奇想為什麼不能用正規呢,效能如何?於是便有瞭如下程式碼:
var url' .baidu.com?a=123&b=456&c=789&e=dfsdfsdfsdfsdfsdfsdf&f=46545454545454785&g=e23232dsfvdfvdf';
[?&] )([^&] )=([^&] )/g;
var data={};
function fn(str,pro,value){
data[decodeURIComponent( pro)]=decodeURIComponent(value);
}
url.replace(reg,fn);
return data;
}
/**
* 格式化查詢字串(正規實作)
* @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;iitem= items[i].split("=");
args[decodeURIComponent(item[0])]=decodeURIComponent(item[1]);
}
return args;
}
}
return args;
}
}
return args;
}
}
return args;
}
}
return args;
}
var startTime=new Date();
for(var i=0;iformatUrl2(url);
}
console.log('formatUrl2',( new Date()-startTime)); //formatUrl2 12138
startTime=new Date();
for(var i=0;iformatUrl(url); } console.log('formatUrl',(new Date()-startTime)); //formatUrl 12537 測試瀏覽器是chrme 25;正規實作的函數居然比數組實現的函數要慢(淚奔....)。不過還好,重複執行一百萬次的情況下只慢0.4秒