public
Created

Modified version of Steven Levithan's parseUri 1.2.2

  • Download Gist
parseUri.js
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
// Modified version of Steven Levithan's parseUri 1.2.2
// See: http://blog.stevenlevithan.com/archives/parseuri
function parseUri( uri ) {
var uriRegex = new RegExp(
// Protocol
"^(?:(?![^:@]+:[^:@/]*@)([^:/?#.]+):)?(?://)?" +
// Authority
"(" +
// Credentials
"(?:(" +
// Username
"([^:@]*)" +
// Password
"(?::([^:@]*))?" +
")?@)?" +
// Host
"([^:/?#]*)" +
// Port
"(?::(\\d*))?" +
// Relative
")(" +
// Path
"(" +
// Directory
"(/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[?#]|$)))*/?)?" +
// File
"([^?#/]*)" +
")" +
// Query
"(?:\\?([^#]*))?" +
// Anchor
"(?:#(.*))?" +
")"
),
 
// Parses key/value pairs from a query string
queryKeysRegex = /(?:^|&)([^&=]*)=?([^&]*)/g,
 
// Keys for the uri hash, mapped from the matches array
properties = [
"source", "protocol",
"authority", "credentials",
"username", "password",
"host", "port",
"relative", "path",
"directory", "file",
"extension", "query",
"anchor"
],
i = 0,
l = properties.length,
matches = uriRegex.exec( uri ),
uri = {
queryData: {}
};
 
for ( ; i < l; i++ ) {
uri[ properties[ i ] ] = matches[ i ] || "";
}
 
uri.query.replace( queryKeysRegex, function( matched, key, value, offset, str ) {
if ( key && key.length ) {
uri.queryData[ key ] = value;
}
});
 
return uri;
};

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.