总结获取url中查询参数的两种方式

通过正则表达式获取单个参数

url中的所有查询参数可以通过 window.location.search 字段获取,以字符串的形式返回。并有固定的格式 ?param1=value1&param2=value2···,所以可以正则表达式匹配。

分析下需要匹配的格式:

  • param=value, 其中需要获取的是value部分,但是也需要 param= 参与匹配,但是不能参与返回结果,这里有前后查找的问题
  • ?param=value&param=value 都可能存在,参数名称紧跟在?&之后;还要注意的是,要区分 emalimail 这种名称,/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中的查询参数的更多相关文章

  1. C# 获取url中的查询字符串参数

    /// <summary> /// 获取url中的查询字符串参数 /// </summary> public static NameValueCollection Extrac ...

  2. 以NameValueCollection 修改URL中的查询参数

    以NameValueCollection 修改URL中的查询参数 本文参考于:http://www.c-sharpcorner.com/Blogs/9421/add-remove-or-modify- ...

  3. 获取request中的查询参数

    //获取request中的查询参数 public static Map<String, Object> getRequestParamsByMap(HttpServletRequest r ...

  4. 【本周面试题】第1周 - 获取URL中的查询字符串参数、get和post的区别

    [此系列优先解决自己经历的面试题] 2018.11.16 面试题一:你如何获取浏览器URL中查询字符串中的参数? 题目代码: 测试地址为 https://www.sogou.com/tx?query= ...

  5. 通过正则表达式获取url中参数

    url: http://xxxx.com?name=魅力&id=123 js中: var name = getUrlParam("name"); /*通过正则获取url中的 ...

  6. JS获取Url中传入的参数

    一:后台获取,前台调用 后台: object value= Request.QueryString[key]; 前台js: $(function(){ var value="<%=va ...

  7. js获取url中的中文参数出现乱码

    解决方法 function getQueryString(key){ var reg = new RegExp("(^|&)"+key+"=([^&]*) ...

  8. JS获取url中的指定参数

    function GetRequest() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new O ...

  9. node.js获取url中的各个参数

    实例代码test.js var http=require('http'); var url=require('url'); var querystring=require('querystring') ...

随机推荐

  1. Vtable内存布局分析

    vtale 内存布局分析 虚函数表指针与虚函数表布局 考虑如下的 class: class A { public: int a; virtual void f1() {} virtual void f ...

  2. msf各种弱口令爆破

    Msf: 写的很乱 记录下msf各个爆破弱口令的模块 run post/windows/gather/arp_scanner RHOSTS=10.10.10.0/24 使用arp_scanner模块 ...

  3. POJ 1035 Spell checker(串)

    题目网址:http://poj.org/problem?id=1035 思路: 看到题目第一反应是用LCS ——最长公共子序列 来求解.因为给的字典比较多,最多有1w个,而LCS的算法时间复杂度是O( ...

  4. 020 - FreeRTOS学习路线总结

    零.为什么写? 在H7-tools预售群里,有位朋友提出如何学习FreeRTOS这类的问题,便由此总结下自己的学习路线.最近又打算接触RTT,和FreeRTOS做个对比. 文章分两步来讲,学习路线和学 ...

  5. java 连续数字数组分组

    问题: 1. 将Lis list = Arrays.asList(1,2,3,5,8,9,10), 拆分成 [1,2,3] .[5]. [8,9,10] , 2. 再传入一个数字 9, 将匹配数字9的 ...

  6. LIGHTX-CMS —— 基于 Node.js,Express.js 以及 SQLite 3 搭建的个人博客系统

    概述 LIGHTX-CMS 是我基于 Node.js,Express.js 以及 SQLite 3 搭建的个人博客发布系统. 项目本身可以拿来部署个人博客网站,同时我认为其也适合用以新手学习 Node ...

  7. 百万年薪python之路 -- 字典(dict)练习

    1.请将列表中的每个元素通过 "_" 链接起来. users = ['大黑哥','龚明阳',666,'渣渣辉'] users = ['大黑哥','龚明阳',666,'渣渣辉'] u ...

  8. git 的一些指令

    作为一个前端,git的各种指令应该是需要掌握的,因为前一段时间遇到了一些问题,总觉得每次遇到点问题都去百度这样总归不大好,还是记录一下比较常见的一些指令吧.以后遇到新的再继续添加. 1. 新建本地分支 ...

  9. unity5.6.1 videoPlayer

    unity5.6开始增加了videoPlayer,使得视频播放相对比较简单,项目需求进行了一下研究应用,也遇到很多坑,Google 百度一下发现确实有这些问题,一些简单问题如下: 1)播放无声音 2) ...

  10. Linux系统运行级别和关机重启命令介绍

    Linux系统运行级别介绍 Linux系统有七种运行级别(Run Level),各个运行级别下,系统有不同的状态,各个级别的意义描述如下. 0:关键级别1:单用户运行级别,运行rc.sysinit和r ...