示例URL
query:https://editor.csdn.net/?a=1&b=2&c=3
hash:https://editor.csdn.net/#a=4&b=5&c=6
方法一:採用正則表達式獲取地址欄參數 (代碼簡潔,重點正則)
function getUrlParam(name, type = 0) {
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"),
paramHash = window.location.hash.split("#")[1] || "",
paramSearch = window.location.search.split("?")[1] || "",
param;
param = type === 0 ? paramSearch : paramHash;
let result = param.match(reg);
if (result != null) {
return result[2].split("/")[0];
}
return null;
}
console.log(getUrlParam('a'));// 1
console.log(getUrlParam('b'));// 2
console.log(getUrlParam('a'), 1);// 4
console.log(getUrlParam('b'), 1);// 5
new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
正則表達式詳解:
- 其中的正則表達式用到了字符串拼接
(^|&)
表示行首或以&開頭
name
表示傳進來的變量
=
表示要獲取值的參數名後面的等號
([^&]*)
表示非&的任意個字符 (0到多個)
(&|$)
表示以&結束或者行尾paramSearch
或paramHash
得到 URL 中?
或#
後面的內容
比如paramSearch
爲:name=hufi&age=18
,假設此時傳進來的參數爲name
,則:
result[0] = "name=hufi&"
是整個
正則表達式匹配到的內容
result[1] = ""
是正則表達式中第一個括號匹配到的內容,即(^|&)
匹配到的內容
result[2] = "hufi"
是正則表達式中第二個括號匹配到的內容,即([^&]*)
匹配到的內容
result[3] = "&"
是正則表達式中最後一個括號匹配到的內容即(&|$)
匹配到的內容
方法二:split拆分法 (代碼較複雜,較易理解)
function getRequest() {
const url = location.search; //獲取url中"?"符後的字串
let theRequest = new Object();
if (url.indexOf("?") != -1) {
let str = url.substr(1);
let strs = str.split("&");
for(let i = 0; i < strs.length; i ++) {
let strsArr = strs[i].split("=");
theRequest[strsArr[0]] = unescape(strsArr[1]);
}
}
return theRequest;
}
console.log(getRequest());
/*
{a: "1", b: "2", c: "3"}
*/
方法三:split拆分法(易於理解,代碼中規)
function getQueryString(name){
let query = window.location.search.substring(1);
let vars = query.split("&");
for (let i = 0; i < vars.length; i++) {
let pair = vars[i].split("=");
if(pair[0] == name)
{return pair[1];}
}
return(false);
}
console.log(getQueryString('a));// 1
console.log(getQueryString('b));// 2
方法四:使用URLSearchParams API
它會返回給我們一個 URLSearchParams 對象。
方法
該接口不繼承任何屬性。
- URLSearchParams.append() 插入一個指定的鍵/值對作爲新的搜索參數。
- URLSearchParams.delete() 從搜索參數列表裏刪除指定的搜索參數及其對應的值。
- URLSearchParams.entries() 返回一個iterator可以遍歷所有鍵/值對的對象。
- URLSearchParams.get() 獲取指定搜索參數的第一個值。
- URLSearchParams.getAll() 獲取指定搜索參數的所有值,返回是一個數組。
- URLSearchParams.has() 返回 Boolean 判斷是否存在此搜索參數。
- URLSearchParams.keys() 返回iterator 此對象包含了鍵/值對的所有鍵名。
- URLSearchParams.set() 設置一個搜索參數的新值,假如原來有多個值將刪除其他所有的值。
- URLSearchParams.sort() 按鍵名排序。
- URLSearchParams.toString() 返回搜索參數組成的字符串,可直接使用在URL上。
- URLSearchParams.values() 返回iterator 此對象包含了鍵/值對的所有值。
官方示例
var paramsString = "q=URLUtils.searchParams&topic=api"
var searchParams = new URLSearchParams(paramsString);
for (let p of searchParams) {
console.log(p);
}
searchParams.has("topic") === true; // true
searchParams.get("topic") === "api"; // true
searchParams.getAll("topic"); // ["api"]
searchParams.get("foo") === null; // true
searchParams.append("topic", "webdev");
searchParams.toString(); // "q=URLUtils.searchParams&topic=api&topic=webdev"
searchParams.set("topic", "More webdev");
searchParams.toString(); // "q=URLUtils.searchParams&topic=More+webdev"
searchParams.delete("topic");
searchParams.toString(); // "q=URLUtils.searchParams"
使用
const params = new URLSearchParams(location.search.replace(/\?/ig, "")); // location.search = "?name=young&sex=male"
params.has("young"); // true
params.get("sex"); // "male"