使用JavaScript对URL进行解析,提取其中的键值对

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Resolve URL</title>
</head>
<body>
<script>
    var url="http://guangzai:hello@www.abc.com:8080/lujing/list.pathname?id=123&name=guang#top";

    function parseUrl(url){
        //创建 <a>标签元素,使其 href 属性指向 url,这样就可以使用 HTMLHyperlinkElementUtils 提供的属性了
        var link=document.createElement("a");
        link.href=url;            
        return {
            //href 包括整个URL
            url:link.href,

            //获取 protocol 默认包括冒号
            protocol:link.protocol.replace(":",""),//如 http:
            
            username:link.username,//如 guangzai
            password:link.password,//如 hello

            //获取 host 默认包括端口,但不包括默认端口
            host:link.host,//如 www.example.com:5678

            //获取 hostname 不包括端口
            hostname:link.hostname,//如 www.example.com

            //获取 port 默认端口则返回字符串
            port:link.port,    //如 1234

            //获取 origin 包括 protocol+host
            origin:link.origin,

            //获取 pathname 包括 origin -- search 之间的字符
            pathname:link.pathname,//如 /source/index.pathname , /source/images , /source/images/

            //search 返回 URL中的所有参数及相关符号,如 ?id=123&name=guang
            parameters:(()=>{
                var param={};//定义对象用于存储参数
                var searchArr=link.search.replace("?","").split("&");//去除问号并分割参数字符串,存储在数组中
                searchArr.forEach((item)=>{
                    var arr=item.split("=");//分割参数字符串,存储在数组中
                    param[arr[0]]=arr[1];//将参数名以及对应的值存在在对象中
                })
                return param;//返回最终的结果
            })(),

            //获取 hash 默认包括井号
            hash:link.hash.replace("#",""),
        }            
    }

    console.log(parseUrl(url));

    //上述例子返回的结果如下:
    var result=
          {
          "url": "http://guangzai:hello@www.abc.com:8080/lujing/list.pathname?id=123&name=guang#top",
          "protocol": "http",
          "username": "guangzai",
          "password": "hello",
          "host": "www.abc.com:8080",
          "hostname": "www.abc.com",
          "port": "8080",
          "origin": "http://www.abc.com:8080",
          "pathname": "/lujing/list.pathname",
          "parameters": {
            "id": "123",
            "name": "guang"
          },
          "hash": "top"
        }

</script>
</body>
</html>