2013-02-05 85 views
0

我已經搜索了JavaScript解決方案(在jQuery庫中)獲取URL參數的堆棧溢出。瞭解從jQuery get 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]; 
} 

我理解它是如何工作的,你設置一個正則表達式,比執行一個正則表達式和檢索一個數組的結果。

有人可以向我解釋正則表達式嗎?我似乎無法理解它。

回答

1

我們調用函數與gup("NAME","http://domain.com?NAME=value&name2=value2")

function gup(name, myurl) { 
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 

此行逃逸方brakets所以它很好地工作在正則表達式查詢,使得"[]""\\\[\\\]"

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

+0

我真的不知道你必須在JS中再次逃避字符串(這使我感到困惑),我絕對需要在實際的正則表達式上多做一些工作。你爲我開闢了一條偉大的道路。泰! –

+0

雖然不是'[\\?&]'找到\,'?或'&?正則表達式測試儀給我這個:http://i.imgur.com/UM0Pcok.png – eithed

+0

@eithed是的,它會,如果它是普通的正則表達式,但它是在一個JS字符串,所以你需要轉義的'\'是用於逃避'?' –

0

比方說,您要搜索名字,那麼正則表達式變爲:[\\?&]firstname=([^&#]*)。現在,它的意思是:[\\?&]搜索任何字符\?&firstname=之後,和[^&#]* =什麼,但&#字符之後

+0

泰非常回答。我相信傑勒德的答案更全面;這就是我接受它的原因。 –

+0

不用擔心:) Regexpes很有趣。我認爲雖然在解釋'[\\?&]'時有一個小錯誤,因爲它表示\,'?或'&(至少我認爲它是:D)。讓我把他的回答作爲評論。 – eithed