正则表达式处理url参数和cookie

使用的工具网站: regexr.com

我知道通过 String.prototype.split() 也可以实现,但本文只讲解正则表达式的方式。

获取url参数

获取 https://www.google.com/search?q=test&rlz=1C1GCEU_zh-CNHK819HK820&oq=test&aqs=chrome..69i57j69i60l3j0l2.2039j0j1&sourceid=chrome&ie=UTF-8 中的查询参数

分析:我们需要的是先获取所有 key=value 形式的匹配结果,再通过分组,获取keyvalue

res-1.png

正则分析:/([^?&=]+)=([^=&]*)/g

  1. key 的组成里面不允许有?&=
  2. value 的组成里面不允许有&=

获取cookie

获取 "__root_domain_v=.tapd.cn; locale=zh_cn; new_worktable=todo%7C20096111%7Ctodo_all%7Cnormal_list; last_iteration_20096111=1120096111001000251; last_iteration_58410793=1158410793001000361" 中的 cookie

res-2.png

正则分析:/([^=;\s]+)=([^=;]+);?/g

  1. key 的组成里面不允许有=;\s (空格)
  2. value 的组成里面不允许有=;
  3. 结尾的 ; 可有可无

匹配全局,并返回分组的结果

  • 为了获取分组结果,需要使用reg.exec() 方法
  • 为了匹配全局,需要 while 循环
function parse(reg, text) {
  if (!reg || !text) return {}
  const hash = {};
  let res = reg.exec(text);
  while(res !== null) {
    hash[res[1]] = res[2];
    res = reg.exec(text);
  }
  return hash;
}

测试用例:

res-3.png

推荐阅读

可能是最好的正则表达式的教程笔记了吧...
《JavaScript 正则表达式迷你书》

你可能感兴趣的:(正则表达式处理url参数和cookie)