URL 参数解析

Posted rosendolu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了URL 参数解析相关的知识,希望对你有一定的参考价值。

  1. url参数解析为对象
  2. url参数解析为数组
  3. URLSearchParams(兼容性有待提高,慎用)

url参数解析为对象

const urlQueryToObject = (url) => {
    if((/?/).test(url)) {
        const arr =  url.split('?')[1].split('&');

        return  arr.reduce((acc,value,index) => {value.replace(/(w+)=(w+)/,(match,p1,p2) => {acc[p1] = p2});return acc},{});
    }
    return {}
}

const getURLParameters = url =>
  (url.match(/([^?=&]+)(=([^&]*))/g) || []).reduce(
    (a, v) => ((a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a),
    {}
);
// example
// location.href ='http://example.com/user?id=1&age=2'
const paramsObj = urlQueryToObject(location.href)  //{id: "1", age: "2"}
paramsObj.id 
paramsObj.age

url参数解析为数组

const urlQueryToArr = url => {
    if((/?/).test(url)) {
        const arr = url.split('?')[1].split('&');
        return arr.reduce((acc,value,index) => {acc.push(value.split('='));return acc;},[])
    }
    return []
}
// example
// location.href ='http://example.com/user?id=1&age=2' 
JSON.stringify(urlQueryToArr(location.href)) //  "[["id","1"],["age","2"]]"

URLSearchParams

/**
 * 
 * @param {string} url 
 * @return URLSearchParams ;
 */
const urlParams = url => {
    if(/?/.test(url)) {
        return searchParams = new URLSearchParams( url.split('?')[1]);
    }
    return new URLSearchParams()
}

useage

// location.href ='http://example.com/user?id=1&age=2' 
const params = urlParams(location.href);  //iterater obj
params.get('id') // 1
params.has('id') // true
params.append('id','2')
params.getAll('id')  //  ?["1", "2"]
params.set('id','0') 
params.get('id') //  "0"
params.getAll('id') //  ["0"]
params.delete('id')
params.get('id')  // null
params.toString() //"age=2"

references:

以上是关于URL 参数解析的主要内容,如果未能解决你的问题,请参考以下文章

Python 的 urllib.parse 库解析 URL

URL 片段中的多个参数

Symfony2 将哈希片段参数附加到分页 URL

URLParser:很实用的URL参数解析器(JAVA代码中方便获取QueryString中的get参数)

URLParser:很实用的URL参数解析器(JAVA代码中方便获取QueryString中的get参数)

如何清除片段中的参数?