实现一个函数用来解析 URL 的 querystring
实现如下效果
1 2 3 4 5 6 7 8 9 | const url = "https://xxxx.com?a=3&b=4&c=5&name=1+1=2" ; // 解析后得到 qs 如下 const qs = { a: 3, b: 4, c: 5, name: '1+1=2' }; |
纯碎使用 javascript
完成解析函数,而不利用浏览器 DOM 特性 API,代码如下所示,细节在注释中体现
function parse(url) { // 一、夹杂在 ? 与 # 之前的字符就是 qs,使用 /\?([^/?#:]+)#?/ 正则来抽取 // 使用正则从 URL 中解析出 querystring // 二、通过 Optional Chain 来避免空值错误 const queryString = url.match(/\?([^/?#:]+)#?/)?.[1]; if (!queryString) { return {}; } queryObj = queryString.split("&").reduce((params, block) => { // 三、如果未赋值,则默认为空字符串 const [_k, _v = ""] = block.split("="); // 四、通过 decodeURIComponent 来转义字符,切记不可出现在最开头,以防 ?tag=test&title=1%2B1%3D2 出错 const k = decodeURIComponent(_k); const v = decodeURIComponent(_v); if (params[k] !== undefined) { // 处理 key 出现多次的情况,设置为数组 params[k] = [].concat(params[k], v); } else { params[k] = v; } return params; }, {}); return queryObj; }
更简便的方式是使用浏览器特性 API,就是下面这个
new URLSearchParams(paramsString)
我们一起来看看使用这个API,实现步骤
function parse() { let serach = window.location.search; let params = new URLSearchParams(serach), queryObj = {}; for (let [k, v] of params.entries()) { if (queryObj[k] !== undefined) { queryObj[k] = [].concat(queryObj[k], v); } else { queryObj[k] = v; } } return queryObj; }
方便一点,对吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人