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

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

阅读 4.7k
3 个回答
  • 第一组 (^|&) 中,^ 表示以某个开头,& 通常出现在连接字符中。
  • 第二组 ([^&]*) 其中 [^&]* 表示匹配非 & 的所有字符,* 表示这组规则的匹配会有 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

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

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

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

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