這似乎是一個沒有明確的解決方案,因爲沒有具體的定義,你想從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/
的
可能重複[?我如何解析URL到JavaScript的主機名和路徑(http://stackoverflow.com/questions/736513/how-do-i-parse -a-url-into-hostname-and-path-in-javascript) –