Skip to content

Instantly share code, notes, and snippets.

@sofish
Last active March 18, 2021 11:31
Show Gist options
  • Save sofish/505e3c63f08dee01e543 to your computer and use it in GitHub Desktop.
Save sofish/505e3c63f08dee01e543 to your computer and use it in GitHub Desktop.
URL Parser
var parser = function(url) {
var a = document.createElement('a');
a.href = url;
var search = function(search) {
if(!search) return {};
var ret = {};
search = search.slice(1).split('&');
for(var i = 0, arr; i < search.length; i++) {
arr = search[i].split('=');
var key = arr[0], value = arr[1];
if(/\[\]$/.test(key)) {
ret[key] = ret[key] || [];
ret[key].push(value);
} else {
ret[key] = value;
}
}
return ret;
};
return {
protocol: a.protocol,
host: a.host,
hostname: a.hostname,
pathname: a.pathname,
search: search(a.search),
hash: a.hash
}
};
var url = 'http://sub.example.com:8023/home/?foo=bar&ciao=cc&arr[]=1&arr[]=2#hash';
parser(url);
// 结果是?
@zenxds
Copy link

zenxds commented Dec 2, 2014

a.pathname在chrome下是带开头的/的,IE下不带,a.port默认情况下IE是输出80的,而chrome是输出空字符串。。

@oxUnd
Copy link

oxUnd commented Feb 14, 2015


      ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
       12            3  4          5       6  7        8 9

   The numbers in the second line above are only to assist readability;
   they indicate the reference points for each subexpression (i.e., each
   paired parenthesis).  We refer to the value matched for subexpression
   <n> as $<n>.  For example, matching the above expression to

      http://www.ics.uci.edu/pub/ietf/uri/#Related

   results in the following subexpression matches:

      $1 = http:
      $2 = http
      $3 = //www.ics.uci.edu
      $4 = www.ics.uci.edu
      $5 = /pub/ietf/uri/
      $6 = <undefined>
      $7 = <undefined>
      $8 = #Related
      $9 = Related

https://tools.ietf.org/html/rfc3986#page-50

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment