分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

将url的查询参数解析成字典对象

发布时间:2023-09-06 02:03责任编辑:苏小强关键词:url

  这个题目不约而同的出现在了多家公司的面试题中,当然也是因为太过于典型,解决方案无非就是拆字符或者用正则匹配来解决,我个人强烈建议用正则匹配,因为url允许用户随意输入,如果用拆字符的方式,有任何一处没有考虑到容错,就会导致整个js都报错。而正则就没有这个问题,他只匹配出正确的配对,非法的全部过滤掉,简单,方便。

  实现代码:

1、手动解析

function getQueryStringArgs(url){ ???url = url == null ? window.location.href : url; ???var qs = url.substring(url.lastIndexOf("?") + 1); ???var args = {}; ???var items = qs.length > 0 ? qs.split(‘&‘) : []; ???var item = null; ???var name = null; ???var value = null; ???for(var i=0; i<items.length; i++){ ???????item = items[i].split("="); ???????//用decodeURIComponent()分别解码name 和value(因为查询字符串应该是被编码过的)。 ???????name = decodeURIComponent(item[0]); ???????value = decodeURIComponent(item[1]); ???????if(name.length){ ???????????args[name] = value; ???????} ???} ???return args;}console.log(getQueryStringArgs(‘https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=12306%E7%81%AB%E8%BD%A6%E7%A5%A8%E7%BD%91%E4%B8%8A%E8%AE%A2%E7%A5%A8%E5%AE%98%E7%BD%91‘));// Object {tn: "monline_3_dg", ie: "utf-8", wd: "12306火车票网上订票官网"}

2、使用正则

function getQueryObject(url) { ???url = url == null ? window.location.href : url; ???var search = url.substring(url.lastIndexOf("?") + 1); ???var obj = {}; ???var reg = /([^?&=]+)=([^?&=]*)/g; ???// [^?&=]+表示:除了?、&、=之外的一到多个字符 ???// [^?&=]*表示:除了?、&、=之外的0到多个字符(任意多个) ???search.replace(reg, function (rs, $1, $2) { ???????var name = decodeURIComponent($1); ???????var val = decodeURIComponent($2); ???????val = String(val); ???????obj[name] = val; ???????return rs; ???}); ???return obj;}console.log(getQueryObject(‘https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=12306%E7%81%AB%E8%BD%A6%E7%A5%A8%E7%BD%91%E4%B8%8A%E8%AE%A2%E7%A5%A8%E5%AE%98%E7%BD%91‘));// Object {tn: "monline_3_dg", ie: "utf-8", wd: "12306火车票网上订票官网"}

将url的查询参数解析成字典对象

原文地址:https://www.cnblogs.com/goloving/p/9292165.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved