There is very simple way to parse URL in Javascript. Just define new method in the prototype of the
String. Of course, it has own shortcomings but in the most cases it covers the wide range of URLs and protocols (
http(s),
ftp,
mailto, etc; the mandatory part of URL,
host is considered as domain names, IPs, and
localhost separately), and moreover it considers the more complex URLs like
jdbc:oracle://localhost:1521.
if ( ! String.prototype.parseUrl ) {
/**
* Considers the string object as URL and returns it's parts separately
*
* @param void
* @return Object
* @access public
*/
String.prototype.parseUrl = function()
{
var matches = this.match(arguments.callee.re);
if ( ! matches ) {
return null;
}
var result = {
'scheme': matches[1] || '',
'subscheme': matches[2] || '',
'user': matches[3] || '',
'pass': matches[4] || '',
'host': matches[5],
'port': matches[6] || '',
'path': matches[7] || '',
'query': matches[8] || '',
'fragment': matches[9] || ''};
return result;
};
String.prototype.parseUrl.re = /^(?:([a-z]+):(?:([a-z]*):)?\/\/)?(?:([^:@]*)(?::([^:@]*))?@)?((?:[a-z0-9_-]+\.)+[a-z]{2,}|localhost|(?:(?:[01]?\d\d?|2[0-4]\d|25[0-5])\.){3}(?:(?:[01]?\d\d?|2[0-4]\d|25[0-5])))(?::(\d+))?(?:([^:\?\#]+))?(?:\?([^\#]+))?(?:\#([^\s]+))?$/i;
}
Here is the initial publication of this algorithm - http://forum.dklab.ru/viewtopic.php?p=148989
ReplyDeleteHello, Ildar.
ReplyDeleteCould you, please, specify a license for this code? For example, BSD/MIT (best ;) ) or CDDL or GPL/LGPL...
Hi Vadim,
ReplyDeleteFeel free using this code in your projects. Just do not forget to paste the link to the original source.