javascript解析url

图片来源

url基本构成如上图所示,href 即为完整的url。

以 http://www.localhost:8080/mian/index.html?id=123&psd=456#789 为例,将其解析为object格式,如下:

{
  protocol: 'http:',
  hostname: 'www.localhost',
  port: '8080',
  pathname: '/main/index.html',
  search: { id: '123', psd: '456' },
  hash: '#789'
}

方法一:使用内置API

var myURL = 'http://www.localhost:8080/main/index.html?id=111&psd=456#789'
function parseURL(href) {
    let url = new URL(href)
    let params = new URLSearchParams(url.searchParams)
    let obj = new Object()
    params = Object.fromEntries(params)
    obj.protocol = url.protocol
    obj.hostname = url.hostname
    obj.port = url.port
    obj.pathname = url.pathname
    obj.search = params
    obj.hash = url.hash
    return obj
}
parseURL(myURL)

方法二:自己写函数,利用split进行分割

var myURL = 'http://www.localhost:8080/main/index.html?id=111&psd=456#789'
function parseURL(href) {
    let obj = new Object()
    obj.protocol = href.split('//')[0]
    let hostname = href.split('//')[1]
    if(hostname.indexOf(':') !== -1) {
        obj.hostname = hostname.split(':')[0]
        obj.port = hostname.split(':')[1].split('/')[0]
    } else {
        obj.hostname = hostname.split('/')[0]
        obj.port = ''
    }
    let pathname = hostname.split('/').slice(1)
    let respath = ''
    for (let i = 0; i < pathname.length; i++) {
        if (i < pathname.length - 1) {
            respath += '/' + pathname[i]
        } else if (i == pathname.length - 1) {
            respath += '/' + pathname[i].split('?')[0]
        }
    }
    obj.pathname = respath
    let params = pathname[1].split('?').slice(1)[0].split('#')[0].split('&')
    let resparams = {}
    for (let i = 0; i < params.length; i++) {
        let param = params[i].split('=')
        console.log(param[0])
        resparams[param[0]] = param[1]
    }
    obj.search = resparams
    obj.hash = '#' + href.split('#')[1]
    return obj
}

第二种方法太过冗长了,但思想是可以的用的。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值