2012-04-05 97 views
2

我很可能是一個非常簡單的正則表達式問題。我正在研究一個簡單的原型,並且需要知道我在哪個頁面上,所以如果用戶單擊菜單窗口小部件導航到相同視圖,則不會重新加載它。與javascript正則表達式的精確字符串匹配

我有兩個網址,用戶可以切換之間:

http://localhost/TestMVC/Larry/LarryTiles

http://localhost/TestMVC/Larry/LarryTilesList

的網址,也可以有一些尾隨查詢字符串的項目,如: http://localhost/TestMVC/Larry/LarryTilesList?filterValue=servers

LarryTiles是給我是這個問題。 「/ \ bLarryTiles \ b /」星期五(在其他問題的回答之後)在這裏工作,但現在不匹配。 :)

我需要找到這兩個URL中的字符串「LarryTiles」和「LarryTilesList」,但無法完全弄清楚如何做到這一點。我的本地機器和它託管的各種服務器之間的URL發生了變化,所以我不能依靠位置。

編輯:添加了一個尾隨查詢字符串的例子,我忘記了。對不起:(

回答

0

?您可以使用此代碼:

str = 'http://localhost/TestMVC/Larry/LarryTiles?filterValue=servers'; 

if (str.match(/\/([^\/?]+)(?=\/$|\?|$)/)) { 
    if (match[1] == 'LarryTiles') 
     alert('LarryTiles found'); 
    else if (match[1] == 'LarryTilesList') 
     alert('LarryTilesList found'); 
} 
+1

這很容易出現尾隨斜線。 – jfriend00 2012-04-05 21:53:07

+0

同意但OP的問題中的網址沒有斜線。 – anubhava 2012-04-05 21:56:32

+0

基於你最近編輯的問題,我更新了我的答案來處理'尾部斜線','查詢字符串'等情況。 – anubhava 2012-04-05 22:19:59

2

你可以得到這樣一個URL的最後路徑段:

function getLastPathSegment(url) { 
    var match = url.match(/\/([^\/]+)\/?$/); 
    if (match) { 
     return(match[1]); 
    } 
    return(""); 
} 

// returns "LarryTiles" 
getLastPathSegment("http://localhost/TestMVC/Larry/LarryTiles");  

// returns "LarryTilesList" 
getLastPathSegment("http://localhost/TestMVC/Larry/LarryTilesList"); 

所以,你可以這樣做:

var endPath = getLastPathSegment(window.location.pathname); 
if (endPath == "LarryTiles") { 
    // some code 
} else if (endPath == "LarryTilesList") { 
    // some code 
} else { 
    // some code 
} 
+0

每新信息從OP,我更新了我的例子比較之前使用window.location.pathname所以任何查詢字符串或哈希標籤已經被剝離。 – jfriend00 2012-04-05 22:30:32

+0

我正在測試這個,但VS和Chrome都說你的正則表達式有錯誤。 – dex3703 2012-04-05 22:57:42

+0

@ dex3703 - 對,抱歉,我修復了一個錯字。 – jfriend00 2012-04-05 23:20:45