获取url的目标参数

面试中经常被问到,汇总下吧。

获取URL?后面的部分

有四种方法:

  1. 正则:
const url = 'http://aaa?query1=1'
let reg = new RegExp(/\?(.*)$/, 'i')
console.log(url.march(reg)[1])
// query1=1
  1. indexOf
const url = 'http://aaa?query1=1'
let idx = url.indexOf('?')
console.log(url.slice(idx))
// query1=1
  1. 转化成URL对象获取
const url = 'http://aaa?query1=1'
let urlObj = new URL(url)
console.log(urlObj.search.slice(1))
// query1=1
  1. 获取当前地址栏:window.location.search

注意:第3点和第四点有个问题:当URL带有#时,此时通过 window.location.search 获取到的参数为空,因为hash会将url中第一个#后的内容都作为hash内容,所以search为空了,很坑爹。

获取URL目标参数

三种方法

  1. 通过正则获取:
function getUrlParams (url, name) {
	// let url = url.split('?')[1] 问题同上注意,可用注释的代码更换
	let urlObj = new URL(url)
	let reg = new RegExp(/(^|&)(\&|$)/, 'i')
	let res = url.search.slice(1).match(reg)[2]
	return res ? res[2] : ''	
}
console.log(getUrlParams('http://aaa?query1=1', 'query1')) // 1
  1. 通过URL对象方法获取(问题同上注意)
function getUrlParams (url, name) {
	let urlObj = new URL(url)
	let paramsObj = new URLSearchParams(urlObj.search) // 传入字符串的话记得开头带上 '?'
	return paramsObj.get(name)
}
  1. 通过split方法分割URL
function getUrlParams (url, name) {
	let queryStr = url.split('?')[1]
	if (!queryStr) return
	let keyValueList = queryStr.split('&')
	for (let i = 0; i < keyValueList.length; i++) {
		if (keyValueList[i].includes(name)) {
			return keyValueList[i].split('=')[1]
		}
	}
	return ''
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值