关于js匹配问题

来源:6-4 店铺信息编辑之前端实现

gliiiii

2019-10-10

function getQueryString(name){
var reg=new RegExp("(|&)"+name+"=([&]*)(&|$)");
var r=window.location.search.substr(1).match(reg);
if(r!=null){
return decodeURIComponent(r[2]);
}
return ‘’;
}
在以上匹配规则中,匹配出来的r值是一个数组,长度为4,但是根据匹配规则来看,应该是只匹配的到shopId=1这个内容,为什么1会被放在r[2]呢?这个1不满足匹配规则啊,这是什么原因?是不是匹配到shopId=1之后,只要是数字就会被自动放到r[2]这个位置?

写回答

1回答

翔仔

2019-10-11

同学好,建议同学直接打开Chrome开发者模式,设置断点调试一下,就会发现 r[2]获取的是 参数=value 里的value值

shopId=1,会被分成 r[1] = "shopId=" r[2]=1 这两个模块, r[0]应该是"shopId=1" 

你调试看看或者直接alert出来就知道了

0
2
翔仔
回复
gliiiii
具体你需要去看看匹配的表达式模式,这里r[0]会存储匹配的项,然后r1 - r2 分别存储匹配()的值,r1存储"(^|&)" + name + "=([^&]*)(&|$)" 里面的 (^|&),这里就是空,r2存储([^&]*)也就是1 而r3存储(&|$) 就是空,模式匹配
2019-10-11
共2条回复

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5113 学习 · 8144 问题

查看课程