zoukankan      html  css  js  c++  java
  • 收藏一个URL解析的通用方法

      1 var parseUrl = (function () {
      2     function f(g) {
      3         return !isNaN(parseFloat(g)) && isFinite(g)
      4     } return function (t, h) {
      5         var g = h || window.location.toString();
      6         if (!t) {
      7             return g
      8         } else {
      9             t = t.toString()
     10         }
     11 
     12         if (g.substring(0, 2) === "//") {
     13             g = "http:" + g
     14         } else {
     15             if (g.split("://").length === 1) {
     16                 g = "http://" + g
     17             }
     18         }
     19         h = g.split("/");
     20         var l = { auth: "" }, s = h[2].split("@");
     21         if (s.length === 1) {
     22             s = s[0].split(":")
     23         } else {
     24             l.auth = s[0]; s = s[1].split(":")
     25         }
     26 
     27         l.protocol = h[0];
     28         l.hostname = s[0];
     29         l.port = (s[1] || ((l.protocol.split(":")[0].toLowerCase() === "https") ? "443" : "80"));
     30         l.pathname = ((h.length > 3 ? "/" : "") + h.slice(3, h.length).join("/").split("?")[0].split("#")[0]);
     31         var j = l.pathname;
     32         if (j.charAt(j.length - 1) === "/") {
     33             j = j.substring(0, j.length - 1)
     34         }
     35 
     36         var o = l.hostname, p = o.split("."), q = j.split("/");
     37         if (t === "hostname") {
     38             return o
     39         } else {
     40             if (t === "domain") {
     41                 if (/^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/.test(o)) {
     42                     return o
     43                 } return p.slice(-2).join(".")
     44             } else {
     45                 if (t === "sub") {
     46                     return p.slice(0, p.length - 2).join(".")
     47                 }
     48                 else {
     49                     if (t === "port") {
     50                         return l.port
     51                     }
     52                     else {
     53                         if (t === "protocol") {
     54                             return l.protocol.split(":")[0]
     55                         }
     56                         else {
     57                             if (t === "auth") {
     58                                 return l.auth
     59                             }
     60                             else {
     61                                 if (t === "user") {
     62                                     return l.auth.split(":")[0]
     63                                 } else {
     64                                     if (t === "pass") {
     65                                         return l.auth.split(":")[1] || ""
     66                                     } else {
     67                                         if (t === "path") {
     68                                             return l.pathname
     69                                         }
     70                                         else {
     71                                             if (t.charAt(0) === ".") {
     72                                                 t = t.substring(1);
     73                                                 if (f(t)) {
     74                                                     t = parseInt(t, 10);
     75                                                     return p[t < 0 ? p.length + t : t - 1] || ""
     76                                                 }
     77                                             }
     78                                             else {
     79                                                 if (f(t)) {
     80                                                     t = parseInt(t, 10);
     81                                                     return q[t < 0 ? q.length + t : t] || ""
     82                                                 }
     83                                                 else {
     84                                                     if (t === "file") {
     85                                                         return q.slice(-1)[0]
     86                                                     } else {
     87                                                         if (t === "filename") {
     88                                                             return q.slice(-1)[0].split(".")[0]
     89                                                         } else {
     90                                                             if (t === "fileext") {
     91                                                                 return q.slice(-1)[0].split(".")[1] || ""
     92                                                             } else {
     93                                                                 if (t.charAt(0) === "?" || t.charAt(0) === "#") {
     94                                                                     var m = g, k = null;
     95                                                                     if (t.charAt(0) === "?") {
     96                                                                         m = (m.split("?")[1] || "").split("#")[0]
     97                                                                     } else {
     98                                                                         if (t.charAt(0) === "#") {
     99                                                                             m = (m.split("#")[1] || "")
    100                                                                         }
    101                                                                     }
    102                                                                     if (!t.charAt(1)) { return m }
    103                                                                     t = t.substring(1);
    104                                                                     m = m.split("&");
    105                                                                     for (var n = 0, r = m.length; n < r; n++) {
    106                                                                         k = m[n].split("=");
    107                                                                         if (k[0] === t) {
    108                                                                             return k[1] || ""
    109                                                                         }
    110                                                                     }
    111                                                                     return null
    112                                                                 }
    113                                                             }
    114                                                         }
    115                                                     }
    116                                                 }
    117                                             }
    118                                         }
    119                                     }
    120                                 }
    121                             }
    122                         }
    123                     }
    124                 }
    125             }
    126         } return ""
    127     }
    128 })();

    调用方式举例:

    parseUrl("?t", "http://a.test.com/bb/cc/test.aspx?username=userA&t=123#aabbcc=1234");//返回userA
    parseUrl("?", "http://a.test.com/bb/cc/test.aspx?username=userA&t=123#aabbcc=1234");//返回username=userA&t=123
    parseUrl("domain", "http://a.test.com/bb/cc/test.aspx?username=userA&t=123#aabbcc=1234");//返回test.com
    parseUrl("sub", "http://a.test.com/bb/cc/test.aspx?username=userA&t=123#aabbcc=1234");//返回a
    // 其它举例可以参考代码
    

      

  • 相关阅读:
    洛谷T44252 线索_分治线段树_思维题
    css 迷惑的position
    【二次元的CSS】—— 用 DIV + CSS3 画大白(详解步骤)
    直接使用sublime编译stylus
    w3schools网站的HTML教程之HTML编辑器
    【二次元的CSS】—— 纯CSS3做的能换挡的电扇
    《JavaScript Dom编程艺术》读书笔记(二)
    JQuery基础修炼-样式篇
    Vue.js 开发实践:实现精巧的无限加载与分页功能
    web前端教程《每日一题》(1-99)完结
  • 原文地址:https://www.cnblogs.com/supperniu/p/3467854.html
Copyright © 2011-2022 走看看