在实际业务中, 需要对一长串的url进行解析,比如读取、添加或修改url中的queryString。
1. 获取url中的参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /** * 获取url内query string的值 * @param {String} url 网址 * @param {String} paramName queryString name */ function getUrlParamByName(url, paramName) { paramName = paramName.replace(/[\[\]]/g, '\\$&' ); let regular = new RegExp( '[?&]' + paramName + '(=([^&#]*)|&|#|$)' ); let val = regular.exec(url); if (!val) { return null ; } if (!val[2]) { return '' ; } return decodeURIComponent(val[2].replace(/\+/g, ' ' )); } |
示例:
1 2 3 4 5 | let url = 'http://wwww.baidu.com/search?userId=6453705&token=b1d710d376498dd803e4e7a01e5932ef' ; // 获取token let token = getUrlParamByName(url, 'token' ); console.log(token); // => b1d710d376498dd803e4e7a01e5932ef |
2. 设置url中的参数
说明:若当前url不存在此queryString,则进行追加操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** * 设置url内query string的值 * @param {String} url 网址 * @param {String} paramName queryString name * @param {String} paramValue queryString value */ function setUrlParam(url, paramName, paramValue) { paramName = paramName.replace(/[\[\]]/g, '\\$&' ); let regular = new RegExp( '[?&]' + paramName + '(=([^&#]*)|&|#|$)' ); let val = regular.exec(url); if (val && val[2]) { url = url.replace( new RegExp(paramName + '=' + val[2]), `${paramName}=${paramValue}`); } else { url += `&${paramName}=${paramValue}`; } return url; } |
示例:
1 2 3 4 5 6 7 8 9 | let url = 'http://wwww.baidu.com/search?userId=6453705&token=b1d710d376498dd803e4e7a01e5932ef' ; // 设置token let newUrl = setUrlParam(url, 'token' , '123' ); console.log(newUrl); // => http://wwww.baidu.com/search?userId=6453705&token=123 // 若不存在queryString,进行追加操作 newUrl = setUrlParam(url, 'dt' , Date.now()); console.log(newUrl); // => http://wwww.baidu.com/search?userId=6453705&token=b1d710d376498dd803e4e7a01e5932ef&dt=1669009911762 |
3. 清除url内指定的参数
说明:用于清除url中指定的queryString。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | /** * 清除url内指定的param * @param {String} url 网址 * @param {Array | String} paramNameList queryString name array */ function clearUrlParam(url, paramNameList) { if (!Array.isArray(paramNameList)) { paramNameList = [].concat(paramNameList); } paramNameList.forEach((paramName) => { paramName = paramName.replace(/[\[\]]/g, '\\$&' ); let regular = new RegExp( '[?&]' + paramName + '(=([^&#]*)|&|#|$)' ); let val = regular.exec(url); if (val && val[2]) { url = url.replace( new RegExp( '&?' + paramName + '=' + val[2]), '' ); } }); if (url.endsWith( '?' )) { url = url.substring(0, url.length - 1); } return url; } |
示例:
1 2 3 4 5 6 7 8 9 | let url = 'http://wwww.baidu.com/search?userId=6453705&token=b1d710d376498dd803e4e7a01e5932ef' ; // 清除token let newUrl = clearUrlParam(url, 'token' ); console.log(newUrl); // => http://wwww.baidu.com/search?userId=6453705 // 清除多个 newUrl = clearUrlParam(url, [ 'userId' , 'token' ]); console.log(newUrl); // => http://wwww.baidu.com/search |
分类:
JavaScript
标签:
Web
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库