# 解析 URL
例题:编写一个 queryURLParameter()
函数,实现把一个 URL 地址问号传参部分的信息获取到,并且解析成对象键值对的形式。
const url = 'https://www.baidu.com/s?wd=javascript&rsv_spt=1'
解析后的结果:
const result = { wd: 'javascript', rev_spt: 1 }
方案一:利用字符串方法,把地址进行拆分,最后获取需要的信息。
function queryURLParameter(url) {
let result = {},
tmp,
index
if (~(index = url.indexOf('?'))) {
url
.slice(index + 1)
.split('&')
.forEach(item => {
tmp = item.split('=')
result[tmp[0]] = tmp[1]
})
}
return result
}
方案二:利用正则进行解析,提取所需要的信息。
function queryURLParameter(url) {
let result = {},
rMap = /([^?&=]+)=([^?&=]+)/g
if (~url.indexOf('?')) {
url.replace(rMap, function(_, key, value) {
result[key] = value
})
}
return result
}
例题:在输入框中如何判断输入的是一个正确的网址?
const url = 'https://www.baidu.com:8080/s?wd=javascript&rsv_spt=1#hash=test'
可参考 https://github.com/any86/any-rule (opens new window)。
const rRUL = /^(?:((?:ht|f)tps)?:\/\/)?((?:\w+\.)+\w+)(?:\:(\d{1,5}))?(\/[^?#]*)?(\?[^#]*)?(#.*)?$/i
console.log(rRUL.exec(url))