2011-08-09 56 views
1

我想獲得通過JavaScript的URL路徑,
例如,我有以下網址:
javascript,如何獲取url路徑?

http://localhost:8080/blah/blah/index.php?p=1 

http://localhost:8080/blah/blah/index.php 

http://localhost:8080/blah/blah/ 

http://localhost:8080/blah/blah 

,我想獲得:http://localhost:8080/blah/blah/ 請人幫我

+0

可能重複[?我如何解析URL到JavaScript的主機名和路徑(http://stackoverflow.com/questions/736513/how-do-i-parse -a-url-into-hostname-and-path-in-javascript) –

回答

3

這似乎是一個沒有明確的解決方案,因爲沒有具體的定義,你想從URL的末尾刪除什麼。

這將很容易刪除查詢參數(第一個例子)。

這將很容易規範化尾部斜線(最後兩個例子)。

如果這是您一直想要的,那麼刪除最後一條路徑會很容易,但除非您願意在URL的末尾添加一些可以區分/index.php/blah的規則,以便算法知道何時刪除一個,但不是另一個,你所要求的是不可能的。由於您已經定義了該問題,因此代碼無法知道是否應該刪除http://localhost:8080/blah/blah末尾的 blah

例如,此代碼將刪除查詢參數和URL的最後一部分,但這隻適用於四個示例中的三個,但在最後刪除的內容中存在歧義:

function cleanURL(url) { 
    return(url.replace(/\?.*$/, "").replace(/\/[^\/]*$/, "") + "/"); 
} 

在這裏它正在你的所有四個例子上運行:http://jsfiddle.net/jfriend00/2Q4Ue/。它返回這些結果爲四種情況:

http://localhost:8080/blah/blah/ 
http://localhost:8080/blah/blah/ 
http://localhost:8080/blah/blah/ 
http://localhost:8080/blah/ 

對於最後一個網址,你可以看到,該算法在年底作爲文件名標識/blah並刪除它,因爲沒有辦法知道這是部分路徑或文件名。

如果你願意制定一個新的規則,即文件名必須有文件擴展名,最後一個路徑名沒有文件名時不會有擴展名,那麼可以編寫這樣一個算法來處理最後一條案件。

OK,一個新的規則,在最後一個文件名是在它的一段話,那麼,你可以使用這個:http://jsfiddle.net/jfriend00/LpauM/,併產生這樣的結果:這是顯示在此小提琴

function cleanURL(url) { 
    return(url.replace(/\?.*$/, "") 
      .replace(/\/[^\/]*\.[^\/]*$/, "") 
      .replace(/\/$/, "") + "/"); 
} 

四個測試網址:

http://localhost:8080/blah/blah/ 
http://localhost:8080/blah/blah/ 
http://localhost:8080/blah/blah/ 
http://localhost:8080/blah/blah/ 
+0

我添加了一個實際的代碼示例和一個jsFiddle,它顯示它在行動中。 – jfriend00

+0

你是儀式,我們可以通過url結尾的「dot」來知道它是否是文件名。無論如何,感謝jfriend,你的回答非常有幫助 –

+0

爲文件名檢測添加了新版本的代碼。 – jfriend00