【问题标题】:Understanding the regex from a jQuery get url parameter function从 jQuery 获取 url 参数函数中理解正则表达式
【发布时间】:2013-02-05 21:02:58
【问题描述】:

我已在堆栈溢出中搜索 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];
}

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

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

【问题讨论】:

    标签: jquery regex


    【解决方案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

    【讨论】:

    • 我真的不知道你必须在 JS 中再次转义字符串(这让我很困惑),我肯定需要在实际的正则表达式上做更多的工作。你为我开辟了一条伟大的道路。泰!
    • 不会[\\?&] 找到\、?&?正则表达式测试器给了我这个:i.imgur.com/UM0Pcok.png
    • @eithed 是的,如果它是普通的正则表达式但它在 JS 字符串中,那么你需要转义用于转义 ?\
    • @eithed,您的测试不正确。关键是在一个 JS 字符串中。这显示了 JS 字符串会发生什么:new RegExp("[\\?&]")。然后执行这个:"i\\love?programming&too".replace(/[\?&]/gi,"")。此外,\ 不用作 URL 中的分隔符,因此该点是静音的。
    • @Gerard Sexton,啊,是的,现在我知道你的意思了。感谢您的解释和您的时间!
    【解决方案2】:

    假设您正在搜索名字,那么正则表达式变为:[\\?&]firstname=([^&#]*)。现在,它的意思是:[\\?&] 搜索任何字符 \?&,之后有 firstname=,以及 [^&#]* = 除了 &# 之后的任何字符

    【讨论】:

    • 非常感谢您的回答。我相信杰拉德的回答更全面;这就是我接受它的原因。
    • 不用担心 :) 正则表达式很有趣。我认为虽然[\\?&] 的解释存在一个小错误,因为它的意思是\、?&(嗯,至少我认为是这样:D)。让我把这个作为评论放在他的回答下面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2018-11-28
    • 2011-08-06
    • 2011-10-01
    • 2012-02-21
    • 1970-01-01
    • 2016-04-18
    相关资源
    最近更新 更多