JavaScript获取URL参数的方法分享


Posted in Javascript onApril 07, 2022

一、字符串 split 方法

url 地址是字符串形式的,所以利用 split 方法将参数提取出来,该方法比较常用,而且容易理解(无关正则)

let URL = "http://www.baidu.com?name=小宇&age=25&sex=男&wife=小君";
function getUrlParams(url) {
    // 通过 ? 分割获取后面的参数字符串
    let urlStr = url.split('?')[1];
    // 创建空对象存储参数
	let obj = {};
    // 再通过 & 将每一个参数单独分割出来
	let paramsArr = urlStr.split('&');
	for(let i = 0,len = paramsArr.length;i < len;i++){
        // 再通过 = 将每一个参数分割为 key:value 的形式
		let arr = paramsArr[i].split('=');
		obj[arr[0]] = arr[1];
	}
	return obj;
}
console.log(getUrlParams(URL));

JavaScript获取URL参数的方法分享

二、使用 URLSearchParams 方法

1、解析搜索字符串

let url = 'https://www.baidu.com/s?ie=UTF-8&wd=%E8%AE%B8%E5%96%84%E7%A5%A5&p=1';
let urlStr = url.split('?')[1];
const params = new URLSearchParams(urlStr);
console.log(params.get('k'));   // 返回字符串“许善祥”,支持自动 UTF-8 解码
console.log(params.get('p'));   // 返回字符串“1”
console.log(params.get('xxx')); // 如果没有 xxx 这个键,则返回 null
console.log(params.has('xxx')); // 当然也可以通过 has() 方法查询是否存在指定的键
console.log(params.keys());     // 返回一个 ES6 Iterator,内含 ['k', 'p']
console.log(params.values());   // 返一个 ES6 Iterator,内含 ['许善祥', '1']
console.log(params.entries());  // 与 Map.prototype.entries() 类似

2、生成搜索字符串

const params = new URLSearchParams();
params.set('k', '许善祥');       // 设置参数
params.set('p', 1);             // 支持 Boolean、Number 等丰富类型
console.log(params.toString()); // k=%E8%AE%B8%E5%96%84%E7%A5%A5&p=1

3、Node.js 代码

const { URLSearchParams } = require('url');

const urlSearchParams = new URLSearchParams();

三、使用正则匹配方法

正则匹配功能强大,不仅可以实现在登录注册时的账号、密码、邮箱、手机号等验证(看这里),还可以非常方便的处理一些字符串(校验、替换、提取等操作)。

let URL = 'http://www.baidu.com?name=祥&friend=宇';
function getUrlParams3(url){
    // \w+ 表示匹配至少一个(数字、字母及下划线),
    // [\u4e00-\u9fa5]+ 表示匹配至少一个中文字符
    let pattern = /(\w+|[\u4e00-\u9fa5]+)=(\w+|[\u4e00-\u9fa5]+)/ig;
    let result = {};
    url.replace(pattern, ($, $1, $2)=>{
        result[$1] = $2;
    });
    return result;
}
console.log(getUrlParams3(URL));
// {name: '祥', friend: '宇'}

四、使用第三方库 qs

使用第三方库 qs 也可以实现 url 中参数字符的提取,还能实现将参数对象转为 url 参数形式,需要注意的是浏览器 cdn 方式引入时是默认添加到全局对象 window 的 Qs 属性上。

<script src="https://cdn.bootcdn.net/ajax/libs/qs/6.10.3/qs.min.js"></script>
<script>
let URL = 'http://www.baidu.com?name=祥&friend=宇';
function getUrlParams4(url) {
    // 引入 qs 库时会默认挂在到全局 window 的 Qs 属性上
    // console.log(window);
    let urlStr = url.split('?')[1];
    let result = Qs.parse(urlStr);
    // 拼接额外参数
    let otherParams = {
        homepage: 'xushanxiang.com'
    };
    let str = Qs.stringify(otherParams);
    let newUrl = url + str;
    return {result, newUrl};
}
console.log(getUrlParams4(URL));

JavaScript获取URL参数的方法分享

到此这篇关于JavaScript获取URL参数的方法分享的文章就介绍到这了,更多相关JavaScript获取URL参数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 学习小结(适合新手参考)
Jul 30 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
使用angularjs创建简单表格
Jan 21 Javascript
ES6的新特性概览
Mar 10 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
Mar 18 Javascript
实践中学习AngularJS表单
Mar 21 Javascript
JavaScript设计模式之策略模式详解
Jun 09 Javascript
详解从买域名到使用pm2部署node.js项目全过程
Mar 07 Javascript
原生JS封装_new函数实现new关键字的功能
Aug 12 Javascript
微信小程序实现单选功能
Oct 30 Javascript
vue两组件间值传递 $router.push实现方法
May 15 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
Sep 05 Javascript
如何通过简单的代码描述Angular父组件、子组件传值
TypeScript 使用 Tuple Union 声明函数重载
Apr 07 #Javascript
Axios代理配置及封装响应拦截处理方式
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 #Vue.js
动态规划之使用备忘录来改进Javascript函数
Apr 07 #Javascript
vue实现拖拽交换位置
Apr 07 #Vue.js
使用Ajax实现进度条的绘制
You might like
php session和cookie使用说明
2010/04/07 PHP
php使用escapeshellarg时中文被过滤的解决方法
2016/07/10 PHP
PHP依赖注入(DI)和控制反转(IoC)详解
2017/06/12 PHP
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
修改js Calendar日历控件 兼容IE9/谷歌/火狐
2013/01/04 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
JS返回iframe中frameBorder属性值的方法
2015/04/01 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python global关键字的用法详解
2019/09/05 Python
Python shutil模块用法实例分析
2019/10/02 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
基于python实现计算两组数据P值
2020/07/10 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
高中生自我鉴定范文
2013/10/30 职场文书
大学班级文化建设方案
2014/05/06 职场文书
爱护公共设施标语
2014/06/24 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android
React更新渲染原理深入分析
2022/12/24 Javascript