Login

首页 > 收集信息 > jQuery/Js/Css > 正文

用Javascript正则实现url链接的解析类 --

2013-05-30.Form:互联网

一个非常健全的 Javascript 链接(URL)解析类,他用了正则表达式可以准确获取一个完整的 URL 中每个部分的内容,包括协议、URL中包含的用户名和密码、主机名、端口、路径名、参数、锚点(Fragment Anchor)等信息

用 Javascript 解析链接(URL)是一个常见的需求,本文介绍了一个非常健全的用 Javascript 写的链接(URL)解析类,他可以准确获取一个完整的 URL 中每个部分的内容,包括协议、URL中包含的用户名和密码、主机名、端口、路径名、参数、锚点(Fragment Anchor)等信息。

 
<body> 
<div id="example"> 
    <div id="example_main"> 
<script type="text/javascript"> 
if (typeof Poly9 == 'undefined') 

    var Poly9 = {}; 

Poly9.URLParser = function(url) { 

    this._fields = { 
        'Username' : 4,  
        'Password' : 5,  
        'Port' : 7,  
        'Protocol' : 2,  
        'Host' : 6,  
        'Pathname' : 8,  
        'URL' : 0,  
        'Querystring' : 9,  
        'Fragment' : 10 
    }; 

    this._values = {}; 
    this._regex = null; 
    this.version = 0.1; 
    this._regex = /^((w+)://)?((w+):?(w+)?@)?([^/?:]+):?(d+)?(/?[^?#]+)???([^#]+)?#?(w*)/; 
    for(var f in this._fields) 
    { 
        this['get' + f] = this._makeGetter(f); 
    } 

    if (typeof url != 'undefined') 
    { 
        this._parse(url); 
    } 

Poly9.URLParser.prototype.setURL = function(url) { 
    this._parse(url); 

Poly9.URLParser.prototype._initValues = function() { 
    for(var f in this._fields) 
    { 
        this._values[f] = ''; 
    } 

Poly9.URLParser.prototype._parse = function(url) { 
    this._initValues(); 
    var r = this._regex.exec(url); 
    if (!r) throw "DPURLParser::_parse -> Invalid URL"; 

    for(var f in this._fields) if (typeof r[this._fields[f]] != 'undefined') 
    { 
        this._values[f] = r[this._fields[f]]; 
    } 

Poly9.URLParser.prototype._makeGetter = function(field) { 
    return function() { 
        return this._values[field]; 
    } 

var url = 'http://user:password@www.jb51.net:1234/test/test.asp?id=1#test'; 
var p = new Poly9.URLParser(url); 
document.write("<strong>URL:</strong> " + url + "<br><br>"); 
document.write("解析结果如下:<br><br>"); 
document.write("<strong>协议:</strong> " + p.getProtocol() + "<br>"); 
document.write("<strong>用户:</strong> " + p.getUsername() + "<br>"); 
document.write("<strong>密码:</strong> " + p.getPassword() + "<br>"); 
document.write("<strong>主机:</strong> " + p.getHost() + "<br>"); 
document.write("<strong>端口:</strong> " + p.getPort() + "<br>"); 
document.write("<strong>路径:</strong> " + p.getPathname() + "<br>"); 
document.write("<strong>查询字符串:</strong> " + p.getQuerystring() + "<br>"); 
document.write("<strong>锚点:</strong> " + p.getFragment() + "<br>"); 
</script> 
    </div> 
</div> 
</body>
 

 

粤ICP备09089143号