2011-06-02 89 views
1

爲什麼不能使用以下jQuery代碼?爲什麼這個jQuery代碼不起作用?

$(function() { 
    var regex = /\?fb=[0-9]+/g; 
    var input = window.location.href; 

    var scrape = input.match(regex); // returns ?fb=4 

    var numeral = /\?fb=/g; 

    scrape.replace(numeral,''); 
    alert(scrape); // Should alert the number? 
}); 

基本上我有一個像這樣的鏈接:

http://foo.com/?fb=4 

如何首先找到?fb=4,然後才撿回多少?

回答

5

考慮使用下面的代碼代替:

$(function() { 
    var matches = window.location.href.match(/\?fb=([0-9]+)/i); 

    if (matches) { 
     var number = matches[1]; 
     alert(number); // will alert 4! 
    } 
}); 

測試在這裏一個例子:http://jsfiddle.net/GLAXS/

正則表達式只是稍微從你提供了什麼修改。 g lobal國旗已被移除,因爲您不會有多個fb=匹配(否則您的網址將無效!)。案例i非敏感標誌標誌被添加以匹配FB=以及fb=

該數字用大括號表示,表示capturing group,這是允許我們使用match的魔法。

如果match與我們指定的正則表達式匹配,它會返回第一個數組元素中匹配的字符串。其餘元素包含我們定義的每個捕獲組的值。

在我們的運行示例中,字符串「?fb = 4」被匹配,返回數組的第一個值也是如此。我們定義的唯一捕獲組是數字匹配器;這就是爲什麼4包含在第二個元素中。

+0

謝謝,小心解釋這是如何工作的?比賽中的陣列是什麼? – daryl 2011-06-02 17:43:02

+0

更好的方法是在'window.location.search'上搜索,以免偶爾在路徑或哈希中匹配子字符串。 – digitalbath 2011-06-02 17:44:07

+0

'match'返回匹配數組。 – circusbred 2011-06-02 17:47:03

-3

如果你是新的正則表達式,爲什麼不嘗試Program that illustrates the ins and outs of Regular Expressions

+1

http://screensnapr.com/v/JpjYtU.png – daryl 2011-06-02 17:39:48

+1

JSLint不處理jQuery:http:// stackoverflow。com/questions/505251/what-good-is-jslint-if-jquery-fails-the-validation – Ben 2011-06-02 17:43:27

+1

謝謝Ben,我其實並不知道。在我回答之前,我將從現在開始使用這些資源。 – Jon 2011-06-02 17:50:14

2

如何使用following function閱讀JavaScript中的查詢字符串參數:

function getQuerystring(key, default_) { 
    if (default_==null) 
     default_=""; 
    key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regex = new RegExp("[\\?&]"+key+"=([^&#]*)"); 
    var qs = regex.exec(window.location.href); 
    if(qs == null) 
     return default_; 
    else 
     return qs[1]; 
} 

然後:

alert(getQuerystring('fb')); 
+0

我對於正則表達式非常陌生,今天只是弄髒了我的手指,所以看着那裏的代碼,我不知道如何實現它在所有的大聲笑。 – daryl 2011-06-02 17:41:31

4

如果你需要的是搶的fb值,只需使用捕捉括號:

var regex = /\?fb=([0-9]+)/g; 
    var input = window.location.href; 

    var tokens = regex.exec(input); 

    if (tokens) { // there's a match 
     alert(tokens[1]); // grab first captured token 
    } 
2

所以,你要養活一個查詢字符串,然後獲取根據參數它的價值?


我不得不有點想提供Get query string values in JavaScript

但後來我看到a small kid abusing a much respectful Stack Overflow answer

// Revised, cooler. 
function getParameterByName(name) { 
    var match = RegExp('[?&]' + name + '=([^&]*)') 
        .exec(window.location.search); 
    return match ? 
     decodeURIComponent(match[1].replace(/\+/g, ' ')) 
     : null; 
} 

雖然你在它,只是調用這樣的功能。

getParameterByName("fb") 
相關問題