处理query请求是页面传参时必备的操作,许多库已经有内置的处理方法,但还是自己手动实现一下吧。
使用正则表达式匹配参数:
[?&]是指从区间范围内(?&)
[^?&]是指除了区间(?&)
+是一个或多个
每个键值对中间等号连接,直接写
const url = "https://xxx.com/user?id=523666&page=favlist"
const reg = /[?&][^?&]+=[^?&]+/g
const found = url.match(reg) // ['?id=523666','&page=favlist']
const result = found.reduce((previousValue, currentValue) => {
// 去除前面的连接符,以等号分割键值对
const obj = currentValue.substring(1).split("=")
const key = obj[0]
previousValue[key] = obj[1]
return previousValue
},{})
console.log(JSON.stringify(result, null, 2))
// output:
/*
{
"id": "523666",
"page": "favlist"
}
*/
关于substring:
stringObject.substring(start,stop)
参数 | 描述 |
---|---|
start | 必需。一个非负的整数,规定要提取的子串的第一个字符在 stringObject 中的位置。 |
stop | 可选。一个非负的整数,比要提取的子串的最后一个字符在 stringObject 中的位置多 1。如果省略该参数,那么返回的子串会一直到字符串的结尾。 |
返回值
一个新的字符串,该字符串值包含 stringObject 的一个子字符串,其内容是从 start 处到 stop-1 处的所有字符,其长度为 stop 减 start。
——摘自菜鸟教程