使用的工具网站: 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
形式的匹配结果,再通过分组,获取key
和 value
。
正则分析:/([^?&=]+)=([^=&]*)/g
-
key
的组成里面不允许有?
、&
、=
-
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
正则分析:/([^=;\s]+)=([^=;]+);?/g
-
key
的组成里面不允许有=
、;
、\s
(空格) -
value
的组成里面不允许有=
、;
- 结尾的
;
可有可无
匹配全局,并返回分组的结果
- 为了获取分组结果,需要使用
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
网友评论