18910140161

js获取当前地址栏URL上的参数修改版

顺晟科技

2021-06-16 10:35:05

368

在地址栏中获取URL参数最简单最常用的方法如下。

函数getUrlParam (name) {

var reg=新RegExp('(^|)'名称'=([^]*)(|$)');

var r=window . location . search . substr(1)。match(reg);

if (r!=null)返回decodeURIComponent(r[2]);返回null

}

//怎么用:http://www.test.com?a=123b=231

var a=getUrlParam('a')//a=123

var b=getUrlParam('b')//b=231

然而,这种方法有缺陷,它不能识别网址中的值带或=号,例如:http://www.test.com?A=123b=231到了

参数a的值为“123”,

如果您仍然使用上述方法获取:

a=1

为什么?有必要分析一下这种方法的原理

//首先,获取URL

var r=window . location . search . substr(1);

//window . location . search . substr(1)能得到URL吗?以下字符串,例如:http://www.test.com?A=123b=231将得到:a=123b=231

//然后有规律地求出每个参数下的值

var reg=新RegExp('(^|)'名称'=([^]*)(|$)')

//1.这里的(|)匹配以null或开头的字符

//2.这里的name是与您正在寻找的匹配的参数名

//3.([] *)这里是匹配“parameter=”后的non的字符

//4.(|$)在此匹配以空结尾的字符

//这里的四个条件求出a=123或者b=231在a=123b=231

r=r . match(reg);

//在这里,match方法可以找出正则字符并以数组的形式给出,例如,如果我们要找一个:

/*

[

A=123 ',//这里是整场正规比赛

,//匹配的是(|)

123 ',//这里是([] *)匹配

//这里有一个(| $)匹配

]

*/

//我们需要的是第三个([] *)匹配字符

Decoderuicomponent(r[2])//在这里获取数组的第三个值,用Decoderuicomponent进行转码

-就这样。如果你早在a=123遇到它,你将早终止它。通向http://www.test.com?a=123b=231中a的值为1

怎么才能避免?我们需要修改这里的规律性

var reg=新RegExp('(^|)'名称'=([^]*)(|$)')

//此处上一段“(|)”名称“=”不变。

//但是([] *)这里的限制必须取消。不能让它只匹配非字符。所以改成([。*])来匹配任何字符(这可能不是很严格)

//(| $)这里最后一个不能用或空来判断,应该是xxx=这个结局。所以改为([=]=| $)来匹配,也就是说开头和结尾之间夹着“非”和“=”等其他字符。这将满足我们的要求。

//最后的正则表达式应该是:

var reg=新RegExp('(^|)'名称'=(。*)([^=]=)');

//这里,因为(。*)匹配所有字符,会匹配到最后一个匹配的参数([=]=),会停止,会造成问题。

//例如,‘http://www.test.com?A=123b=231c=565 '当你转到' a '时,你会得到' 123b=231 ',其中包括b's。因此,此处需要进一步处理,以仅移除b=的先前值。

//这里假设‘a’的值是123b=231

var a='123b=231 '

var l=a . match(/[=]=/)[0]//这里会得到个匹配的字符串'/[=]=/':'b='

A=a.split(l)[0] //这里我们按照l除a,取个,这就是我们想要的

//但是,这不能匹配最后一个参数,因为最后一个是空结尾而不是' xxx=',所以多写一个匹配最后一个参数的正则。

var reg=新RegExp('(^|)'名称'=(。*)($)');

整个新方法是:

函数getUrlParam (name) {

var reg=新RegExp('(^|)'名称'=(。*)([^=]=)');

var regLast=新RegExp('(^|)'名称'=(。*)($)');

var r=window . location . search . substr(1)。match(reg)| | window . location . search . substr(1)。匹配(RegLast);

if (r!=null) {

var l=r[2]。match(/[^=]=/)

if (l) {

返回decodeURIComponent(r[2]。split(l[0])[0]);

} else return decodeURIComponent(r[2]);

}

返回null

}

请指出任何错误。

我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航