var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');

发布于 2022-09-13 00:49:28 字数 105 浏览 13 评论 0

这个正则表达式怎么理解name是个变量'(^|&)''=([^&]*)(&|$)'怎么理解?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

末骤雨初歇 2022-09-20 00:49:28
  • 第一组 (^|&) 中,^ 表示以某个开头,& 通常出现在连接字符中。
  • 第二组 ([^&]*) 其中 [^&]* 表示匹配非 & 的所有字符,* 表示这组规则的匹配会有 0...N 次。
  • 第三组 (&|$) 分别表示,以后面有 & 或者直接到结尾($)

用实际例子来解释,比如有字符串 a=1&b=2&c=3&d=4 ,假设现在 name 是 a,带进去 (^|&)a=([^&]*)(&|$),开始匹配,^a= 标识以 a= 开头,这组匹配成功,继续下一组,([^&]*) 因为是匹配非 &字符,匹配到了 1 后遇到了 & ,下面开始,因为下一组 (&|$) 中,& 匹配了,所以最终第二组返回 1

同理往后,设匹配 name 为 b 的时候,第一组先匹配 ^b= 不满足,因为 b= 前面还有一个 & 字符所以匹配到了第二个条件,&b=成立了重复如上

最后匹配 d 的时候,前面的都和匹配 b 一样,但是最后不一样,因为 d 后面没有 & ,但是匹配到了 $ 标识以结束了。

image.png

除此之外还可以使用 URLSearchParams

image.png

南风几经秋 2022-09-20 00:49:28

直接用URLSearchParams就好了 没必要再正则截取了吧

心奴独伤 2022-09-20 00:49:28

var name='abc';
那么正则等于/(^|&)abc=([^&]*)(&|$)/i
(^|&)abc=要求已abc或者&开头且之后必须有=号,即开头要么是abc=要么是&abc=

([^&]*)这个捕获组捕获从=开始到&的任意字符,可以是空
(&|$)这个捕获组截止到&字符,或者结尾处.
举例那么符合规则的字符有

看上去是截取URL参数?
第二个捕获组就是你想要的参数

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文