思路:字符串打断为数组 先分成两部分,取出协议和域名 然后对后一部分拆分,根据url的定义,?后为paramas,按其拆分,放进对象即可
const urlStr = 'https://pages.tmall.com/wow/hdwk/act/2020nhj-single?wh_biz=tm&disableNav=YES&disableProgress=YES&hd_from=alipay_mayifarm&hd_from_id=100085&sceneId=972&deliveryId=8945&task_type=callapp&sceneCode=FUGUO&implId=other_0_158001_8945_0&query=spm&prismFrom=alipay_mayifarm&slk_gid=gid_er_er%7Cgid_er_evoke_ui_2%7Cgid_er_af_pop%7Cgid_er_sidebar_1&_afc_link=1&utparamcnt=%7B%22_afc_link%22%3A%221%22%7D#state';
function urlSearch(href) {
let name, value;
let str = decodeURI(href);
let patrol = str.split("://");
const json = {};
json["patrol"] = patrol[0];
json["host"] = patrol[1].split("/")[0];
let paramaIndex = str.indexOf("?");
let paramas = str.substr(paramaIndex + 1).split("&");
for(let parama of paramas){
let index = parama.indexOf("=");
if(index > 0){
name = parama.substring(0, index);
value = parama.substring(index + 1);
json[name] = value;
}
}
return json;
}
输出
{
"patrol": "https",
"host": "pages.tmall.com",
"wh_biz": "tm",
"disableNav": "YES",
"disableProgress": "YES",
"hd_from": "alipay_mayifarm",
"hd_from_id": "100085",
"sceneId": "972",
"deliveryId": "8945",
"task_type": "callapp",
"sceneCode": "FUGUO",
"implId": "other_0_158001_8945_0",
"query": "spm",
"prismFrom": "alipay_mayifarm",
"slk_gid": "gid_er_er|gid_er_evoke_ui_2|gid_er_af_pop|gid_er_sidebar_1",
"_afc_link": "1",
"utparamcnt": "{\"_afc_link\"%3A\"1\"}#state"
}