用正则表达式获取URL中的查询参数
总结获取url中查询参数的两种方式
通过正则表达式获取单个参数
url中的所有查询参数可以通过 window.location.search 字段获取,以字符串的形式返回。并有固定的格式 ?param1=value1¶m2=value2···,所以可以正则表达式匹配。
分析下需要匹配的格式:
param=value, 其中需要获取的是value部分,但是也需要 param= 参与匹配,但是不能参与返回结果,这里有前后查找的问题?param=value和¶m=value都可能存在,参数名称紧跟在?或&之后;还要注意的是,要区分 emali和mail 这种名称,/mail/既能匹配到email又能匹配mail,所以要给参数名称加一个边界,名称的上一个字符要是一个非单词(\W)的字符,这样就可以解决这两个问题value后可能是空,也可能是下一组参数(以&分割),所以value的值要匹配到[^&]为止- 由于参数名称是变化的,所以需要用字符串的形式来生成正则表达式
前后查找和边界的介绍可以细看MDN中的详细介绍。
搞定正则之后,使用string的match方法,就能直接获取到对应的参数值
function getUrlParamsByName(name) {
// \b 边界
// ?<= 向后匹配
// 字符串转成正则表达式,其中的'\b'类型的特殊字符要多加一个'\'
let reg = new RegExp(`(?<=\\b${name}=)[^&]*`),
str = location.search || '',
target = str.match(reg);
if(target) {
return target[0]
}
return;
}
解析所有参数,以对象返回
上一个方法是获取单个的参数值,此方法是为了解析出所有的参数
利用string的一些工具函数取值,注意一些异常场景的判断
function getUrlParams() {
let obj = {};
if (!window) {
return;
}
let str = window.location.search || '';
if (str && str.slice(1)) {
// 去掉 ? ,然后以 & 分割
let queryArray = str.slice(1).split('&');
queryArray.map((query) => {
// param=value 以 = 分割
let temp = query.split('=');
if(temp.length > 1) {
// 收集参数
obj[temp[0]] = temp[1];
}
})
}
return obj;
}
总结
正则表达式的方式更加灵活便捷啊,开始用的时候不习惯,后来觉得真香!
用正则表达式获取URL中的查询参数的更多相关文章
- C# 获取url中的查询字符串参数
/// <summary> /// 获取url中的查询字符串参数 /// </summary> public static NameValueCollection Extrac ...
- 以NameValueCollection 修改URL中的查询参数
以NameValueCollection 修改URL中的查询参数 本文参考于:http://www.c-sharpcorner.com/Blogs/9421/add-remove-or-modify- ...
- 获取request中的查询参数
//获取request中的查询参数 public static Map<String, Object> getRequestParamsByMap(HttpServletRequest r ...
- 【本周面试题】第1周 - 获取URL中的查询字符串参数、get和post的区别
[此系列优先解决自己经历的面试题] 2018.11.16 面试题一:你如何获取浏览器URL中查询字符串中的参数? 题目代码: 测试地址为 https://www.sogou.com/tx?query= ...
- 通过正则表达式获取url中参数
url: http://xxxx.com?name=魅力&id=123 js中: var name = getUrlParam("name"); /*通过正则获取url中的 ...
- JS获取Url中传入的参数
一:后台获取,前台调用 后台: object value= Request.QueryString[key]; 前台js: $(function(){ var value="<%=va ...
- js获取url中的中文参数出现乱码
解决方法 function getQueryString(key){ var reg = new RegExp("(^|&)"+key+"=([^&]*) ...
- JS获取url中的指定参数
function GetRequest() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new O ...
- node.js获取url中的各个参数
实例代码test.js var http=require('http'); var url=require('url'); var querystring=require('querystring') ...
随机推荐
- Python_三元运算与lambda表达式
[是什么] 三元运算是if...else...的简化版,lambda表达式是函数的简化版 三元运算(三目运算) # 判断两个数中的较大者 fun(a1,a2): return a1 if a1> ...
- 实验吧之【who are you?】(时间盲注)补充
第二种方法 使用brup进行盲注 也是一个道理 不多贴了 这里提一下 burp怎么判断超时 Options->Connections->Tiimeouts->Normal这一空 ...
- Python3的编码整理总结
python3在内存中是用unicode编码方式存储的,所以不能直接储存和传输,要转化为其他编码进行储存和传输. 字符串通过编码转换成字节码,字节码通过解码成为字符串 encode:str --> ...
- Python之单例模式的多种实现
单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...
- 网站是HTTP?10分钟变成HTTPS!域名免费添加配置SSL证书,变成https//环境
对于小程序request请求需要https域名.navigator.geolocation定位也需要在https环境下才可以生效等问题: 前端开发越来越需要https环境来来测试一下API接口和各类问 ...
- 19.Linux进程管理概述
1.进程基本概述 当我们运行一个程序,那么我们将运行的程序叫进程. PS1: 当程序运行为进程后,系统会为该进程分配内存,以及进程运行的身份和权限. PS2: 在进程运行的过程中,服务器上会有各种状态 ...
- xml 文件操作
'XML添加 Public Sub Add(ID As String, RFSerialnumber As String, Mood As Integer) If reatch(RFS ...
- 向net core 3.0进击——项目发布与部署
目录 前言 发布 测试 小结 前言 在经历过好多折腾后,总算是把部署走通了一遍,之前只是简单创建个工程在linux下部署,后来一直将这件事搁置,直到最近刚好团队入手一个小服务器,很显然是linux的, ...
- 史上最轻松入门之Spring Batch - 轻量级批处理框架实践
从 MariaDB 一张表内读 10 万条记录,经处理后写到 MongoDB . Batch 任务模型 具体实现 1.新建 Spring Boot 应用,依赖如下: <!-- Web 应用 -- ...
- JavaWeb EL表达式 key为数值 Map取不到值
JavaWeb EL表达式 key为 Map取不到值 因为JSTL会把Integer,Byte,Short,Charactor都转成Long,这样就取不到值. 参见StackOverFlow的回答 ...