从jQuery获取url参数函数了解正则表达式

时间:2013-02-05 12:14:08

标签: jquery regex

我已经搜索了堆栈溢出的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];
}

我理解它是如何工作的,你设置一个正则表达式,然后执行该正则表达式并在数组中检索结果。

有人可以向我解释正则表达式吗?我似乎无法理解它。

2 个答案:

答案 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=[^&#]* =除了&#字符之外的任何字符