我已经搜索了堆栈溢出的Javascript解决方案(在jQuery库中)以获取URL参数。
我有这个功能顺利完成:
// get the firstname value from the myurl - http://mysite.com?firstname=dany&lastname=dughy
var myurl = $("#gup").data("url");
var name = "firstname";
function gup(name, myurl) {
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec(myurl);
if( results == null )
return "";
else
return results[1];
}
我理解它是如何工作的,你设置一个正则表达式,然后执行该正则表达式并在数组中检索结果。
有人可以向我解释正则表达式吗?我似乎无法理解它。
泰
答案 0 :(得分:1)
让我们用gup("NAME","http://domain.com?NAME=value&name2=value2")
调用函数。
function gup(name, myurl) {
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
此行会转义方块,因此它在正则表达式查询中运行良好,将"[]"
转换为"\\\[\\\]"
。
var regexS = "[\\?&]"+name+"=([^&#]*)";
现在解析名称以在正则表达式中工作。它看起来像"[\\?&]NAME=([^&#]*)"
。
"[\\?&]"
表示找到?
或&
。由于?
是一个特殊字符,要匹配文本中的?
,您需要像\?
一样将其转义,因此此正则表达式将变为[\?&]
,但在javascript字符串中您需要再次逃离\
。因此[\?&]
在字符串中变为"[\\?&]"
。
=([^&#]*)
匹配文字=
,后跟除&
或#
之外的任何字符。
var regex = new RegExp( regexS );
var results = regex.exec(myurl);
if( results == null )
return "";
else
return results[1];
返回捕获的组,位于位置1.位置0是整个匹配。
}
函数调用返回value
答案 1 :(得分:0)
假设您正在搜索名字,然后正则表达式变为:[\\?&]firstname=([^&#]*)
。现在,它意味着:[\\?&]
搜索之后有\
的任何字符?
,&
或firstname=
,[^&#]*
=除了&
或#
字符之外的任何字符