0

URLパラメータを取得するために(jQueryライブラリで)Javascriptソリューションのスタックオーバーフローを検索しました。

私はそれをスムーズに行うこの機能を持っています:

// 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];
}

私はそれがどのように機能するかを理解しています。あなたは正規表現を設定し、その正規表現を実行して結果を配列で取得します。

誰かが私に正規表現を説明してもらえますか?理解できないようです。

Ty

4

2 に答える 2

2

で関数を呼び出しましょう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

于 2013-02-05T13:02:58.047 に答える
0

名を検索しているとすると、正規表現は次のようになります[\\?&]firstname=([^&#]*)。さて、それが意味するのは、次のとおりです。[\\?&]任意の文字\?または&その後firstname=にある文字を検索し、[^&#]*=&または#後の文字以外の文字を検索します。

于 2013-02-05T12:36:44.333 に答える