A php parse_url függvényét már ismerjük. Most ismerjük meg ugyanezt javascripthez is.
Steven Levithan: parseUri 1.2: Split URLs in JavaScript
Script:
/* parseUri 1.2; MIT License
By Steven Levithan <http://stevenlevithan.com> */
var parseUri = function (source) {
var o = parseUri.options,
value = o.parser[o.strictMode ? "strict" : "loose"].exec(source);
for (var i = 0, uri = {}; i < 14; i++) {
uri[o.key[i]] = value[i] || "";
}
uri[o.q.name] = {};
uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
if ($1) uri[o.q.name][$1] = $2;
});
return uri;
};
parseUri.options = {
strictMode: false,
key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
q: {
name: "queryKey",
parser: /(?=.)&?([^&=]*)=?([^&]*)/g
},
parser: {
strict: /^(?:([^:/?#]+):)?(?://((?:(([^:@]*):?([^:@]*))?@)?([^:/?#]*)(?::(d*))?))?((((?:[^?#/]*/)*)([^?#]*))(?:?([^#]*))?(?:#(.*))?)/,
loose: /^(?:(?![^:@]+:[^:@/]*@)([^:/?#.]+):)?(?://)?((?:(([^:@]*):?([^:@]*))?@)?([^:/?#]*)(?::(d*))?)(((/(?:[^?#](?![^?#/]*.[^?#/.]+(?:[?#]|$)))*/?)?([^?#/]*))(?:?([^#]*))?(?:#(.*))?)/
}
};
Használat:
var items = parseUri('http://usr:pwd@www.test.com:81/dir/dir.2/index.htm?q1=0&&test1&test2=value#top');