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 相关文章推荐
简单三步,搞掂内存泄漏
Mar 10 Javascript
jQuery动态添加 input type=file的实现代码
Jun 14 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
Jun 24 Javascript
JS判断表单输入是否为空(示例代码)
Dec 23 Javascript
ie7+背景透明文字不透明超级简单的实现方法
Jan 17 Javascript
javascript实现无缝上下滚动特效
Dec 16 Javascript
基于JavaScript实现前端文件的断点续传
Oct 17 Javascript
Javascript 普通函数和构造函数的区别
Nov 05 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
Jan 06 Javascript
Vue学习笔记进阶篇之函数化组件解析
Jul 21 Javascript
JS返回页面时自动回滚到历史浏览位置
Sep 26 Javascript
JavaScript工具库MyTools详解
Jan 01 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
php邮箱地址正则表达式验证
2015/11/13 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
webpack 2.x配置reactjs基本开发环境详解
2017/08/08 Javascript
nodejs使用http模块发送get与post请求的方法示例
2018/01/08 NodeJs
Javasript设计模式之链式调用详解
2018/04/26 Javascript
微信小程序实现运动步数排行功能(可删除)
2018/07/05 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
python读取注册表中值的方法
2013/04/08 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
对django layer弹窗组件的使用详解
2019/08/31 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
阿波罗盒子:Apollo Box
2017/08/14 全球购物
学前教育求职自荐信范文
2013/12/25 职场文书
党在我心中的演讲稿
2014/09/13 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
于丹论语心得观后感
2015/06/15 职场文书
nginx 多个location转发任意请求或访问静态资源文件的实现
2021/03/31 Servers