試試這個:
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])應該輸出一個空警報(我測試了它,它爲我做了)可能它在看到第一個字符並且說「哦,這裏有一場比賽!」之後一定停止了。
希望這有助於你的理解:)當你開始和他們在一起時,正則表達式可能會引起混淆,但我絕對愛他們。如此強大。
你爲什麼要寫'$(this)[0]'? – SLaks 2011-03-25 16:07:13
這是jquery函數的結果。 $(this)[0]是來自jquery事件的響應,在我的應用程序中它返回一個類似於給定的url。 – user674073 2011-03-25 16:08:48