请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于js匹配问题

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]这个位置?

正在回答 回答被采纳积分+3

1回答

翔仔 2019-10-11 00:52:14

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

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 gliiiii #1
    我调试出来r.length=4,r[0]=“shopId=1”,r[1]=“”,r[2]=1,r[3]=“”,这就是我不懂的地方。这是如何匹配的?
    回复 有任何疑惑可以回复我~ 2019-10-11 01:13:02
  • 翔仔 回复 提问者 gliiiii #2
    具体你需要去看看匹配的表达式模式,这里r[0]会存储匹配的项,然后r1 - r2 分别存储匹配()的值,r1存储"(^|&)" + name + "=([^&]*)(&|$)" 里面的 (^|&),这里就是空,r2存储([^&]*)也就是1 而r3存储(&|$) 就是空,模式匹配
    回复 有任何疑惑可以回复我~ 2019-10-11 02:21:23
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号