프로젝트에서 js 배열 분할 방식을 통해 쿼리 문자열의 형식이 지정되는 것을 보고 문득 왜 정규식을 사용할 수 없는지 궁금했습니다. 따라서 다음과 같은 코드가 있습니다.
var url ='www .baidu.com?a=123&b=456&c=789&e=dfsdfsdfsdfsdfsdfsdf&f=46545454545454785&g=e23232dsfvdfvdf';
/**
* 형식화된 쿼리 문자열(일반 구현)
* @param url url 주소
* @return {Object} 형식화된 json 객체
*/
함수 formatUrl(url){
var reg=/ (?: [?&] )([^&] )=([^&] )/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; }
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입니다. 실제로 배열보다 낫습니다. 구현된 함수는 더 느려져야 합니다(눈물이...). 하지만 다행스럽게도 100만 번 반복하면 0.4초만 느려집니다.