parsing urls & search(qs) in javascript
JavaScript
// Parse a URL. Based upon http://blog.stevenlevithan.com/archives/parseuri
// parseUri 1.2.2, (c) Steven Levithan <stevenlevithan.com>, MIT License
// Inputs: url: the URL you want to parse
// Outputs: object containing all parts of |url| as attributes
parseUri = function(url) {
var matches = /^(([^:]+(?::|$))(?:(?:\w+:)?\/\/)?(?:[^:@\/]*(?::[^:@\/]*)?@)?(([^:\/?#]*)(?::(\d*))?))((?:[^?#\/]*\/)*[^?#]*)(\?[^#]*)?(\#.*)?/.exec(url);
// The key values are identical to the JS location object values for that key
var keys = ["href", "origin", "protocol", "host", "hostname", "port",
"pathname", "search", "hash"];
var uri = {};
for (var i=0; i<keys.length; i++)
uri[keys[i]] = matches[i] || "";
return uri;
};
// Parses the search part of a URL into an key: value object.
// e.g., ?hello=world&ext=adblock would become {hello:"world", ext:"adblock"}
// Inputs: search: the search query of a URL. Must have &-separated values.
parseUri.parseSearch = function(search) {
// Fails if a key exists twice (e.g., ?a=foo&a=bar would return {a:"bar"}
var queryKeys = {};
search.replace(/(?:^\?|&)([^&=]*)=?([^&]*)/g, function () {
if (arguments[1]) queryKeys[arguments[1]] = unescape(arguments[2]);
});
return queryKeys;
}
console.log(parseUri("http://www.peterbenoit.com:80/monkey/index.html?id=1&fruit=banana"));