2011-03-25 57 views
1

alert($(this)[0]);返回一個url,例如。 http://localhost/www/anotherdir/go.php?id=12aaa學習正則表達式和jQuery - .match返回什麼?

我希望將「12」和「aaa」放置在單獨的變量中(引用的值可以是任何值,但始終是一個數字,後面跟着三個字母)。

使用/\?*返回ID = 12aaa在正則表達式編輯器正則表達式,但...

這不會生成警報()盒 - 無任何響應:

x = $(this)[0].match(/\?*/); 
alert(x); 

這也確實不做任何事情:

x = $(this)[0].match(/\?*/); 
alert(x[0]); 
+3

你爲什麼要寫'$(this)[0]'? – SLaks 2011-03-25 16:07:13

+0

這是jquery函數的結果。 $(this)[0]是來自jquery事件的響應,在我的應用程序中它返回一個類似於給定的url。 – user674073 2011-03-25 16:08:48

回答

5

試試這個:

var x = $(this)[0].match(/[^\?]*$/); 
alert(x[0]); 

假裝$(本)[0 ]返回「/我的/好玩/路徑?QUERY1 =一個& QUERY2 = b 注意x是數組["query1=a&query2=b"]

如果,例如,希望得到每個查詢參數作爲索引在數組中你可以這樣做:

var params = $(this)[0].match(/[^\?]*$/)[0].split('&'); 

,這將給你:

["query1=a", "query2=b"] 

編輯突破下降爲你的正則表達式:

  • []是一個字符類,並且可以永遠只匹配單個字符不管它有多少內容。例如,
  • [a-z]將匹配任何單個小寫字母字符。
  • 字符類開頭的^(插入符號)是一個非標識符。指示這個字符類具有相反的效果 - 它將匹配與其餘內容不匹配的任何單個字符。這個位置(字符類中的第一個字符)是插入符號表示「不」的唯一時間。在其他上下文中,它有不同的含義(例如,在您的正則表達式的開頭^將指示字符串的開頭必須從那裏開始)。
  • 因此,我們的字符類[^\?]表明我們將匹配任何單個字符問號
  • 星號總是意味着「零個或多個前面的語句」,所以當你試圖只使用*意思是「任何東西」,你實際上做的是複製\?零次或多次 - 向口譯員陳述「我想要一個問號零次或多次」。您的alert(x[0])應該已輸出一個空的對話框,更多的在後面
  • 在我們的情況下,星號正在檢查任何非問號,零次或多次。
  • $在reg-ex狀態末尾的「字符串結尾」,這意味着...當然,字符串的末尾必須在該點。

因此,我們知道正則表達式不會從您的url收集問號,因爲那樣它將無法在字符串末尾收集多個非問號標記。除非另有說明,否則*總是貪婪,所以它會獲得儘可能多的字符。因爲.match()方法匹配它的第一件事,因爲/\?*/幾乎匹配每一個字符串,所以你的alert(x [0])應該輸出一個空警報(我測試了它,它爲我做了)可能它在看到第一個字符並且說「哦,這裏有一場比賽!」之後一定停止了。

希望這有助於你的理解:)當你開始和他們在一起時,正則表達式可能會引起混淆,但我絕對愛他們。如此強大。

0

正則表達式/\?*/匹配零個或多個問號。這對於URL開始處的空字符串是正確的,因此正則表達式引擎會返回一個空字符串。顯然不是你想到的。

您可以使用/[^?]*$/匹配字符串中最後一個?之後的任何內容(如果不存在?,則可以使用整個字符串)。

+0

謝謝 - 回補救正則表達式對我來說(!)但是,警告框仍然不會觸發。還有什麼想法?我試圖弄清楚.match如何返回結果 - 一個數組? – user674073 2011-03-25 16:20:41

+0

使用console.log – 2012-07-18 12:28:21

0

你在找這樣的事嗎?

var hash = window.location.hash; 
alert(hash); 
+0

不,我需要處理jquery函數的結果。結果將返回(成功)到$(this)[0]中。結果是正確的,這是在jquery函數中使用.match讓我困惑。 – user674073 2011-03-25 16:11:45

2
> "http://localhost/www/anotherdir/go.php?id=12aaa&more=123".match(/\?id=(\d+)(\w+)/); 
> ["?id=12aaa", "12", "aaa"] 
0

因爲空警報(如警報())根本不會在Firefox中顯示一個警告。 你也應該考慮使用document.location.search訪問你則params的,而不是這種怪異的$(本)[0]

相關問題