首页 > 代码库 > url 解析

url 解析

最近在做一个单页应用,使用AngularJS来处理一些页内路由(哈希#后的路由变化)。自然会要解析URL中的参数。使用AngularJS自带的方法$location.search();可以自动将参数整理成一个对象,感觉非常方便,我们今天就来试着写一个。url嘛,可以看成一个有特定规律的字符串。第一反应是是不是可以用正则表达式和字符串操作

一个复杂的url 可能是这样的http://www.baidu.com/#/test/my?params1=a&parmas2=b&parmas2=bb&parmas2=bbb

一、字符串函数解析

我们可以借助一个字符串API split() :  http://www.w3school.com.cn/jsref/jsref_split.asp

 1     var urlTool = { 2         getDomain: function(url){ 3             var _url = url; 4             var domain = (_url.split(‘?‘)[0]).split(‘#‘); 5             if(domain){ 6                 return domain; 7             }else{ 8                 return ‘‘; 9             }10         },11         getParmas: function(url){12             var search = {};13             var _url = url;14             var strParams = _url.split(‘?‘)[1];15             if(!strParams){return {};}16             var params = strParams.split(‘&‘);17             var par_len = params.length;18             for(var i_par = 0; i_par < par_len; i_par++){19                 var par = params[i_par].split(‘=‘);20                 var k = par[0],21                     v = par[1];22                 if(!search[k]){23                     search[k] = v;24                 }else{25                     if(search[k].length && search[k].length > 1){26                         //已存在是数组27                         search[k].push(v);28                     }else{29                         //已存在但不是数组30                         var old_v = search[k]31                         search[k] = [];32                         search[k].push(old_v);33                         search[k].push(v);34                     }35                 }36             }37             return search;38         }39     }

 

url 解析