2011-10-20 79 views
5

確定讓我說我有一個網址使用JavaScript或jQuery解析URL

example.com/hello/world/20111020(有或沒有結尾的斜槓)。 我想要做的是從域名example.com去掉url。然後將hello world 20111020分解成一個數組。但我的另一個問題是。有時URL沒有/ hello/world/20111020或者只是/ hello /所以我需要首先確定在example.com之後是否有任何東西,如果沒有,那麼不要做任何事情,因爲顯然沒有任何東西可以使用。但是,如果有每個/我需要按順序將它添加到此數組。所以我可以使用數組[0]並知道它是你好。

我嘗試了幾天回來,但遇到了尾隨斜槓問題,它不斷破壞腳本,我不幸拋棄了這個想法。今天我正在尋找新的想法。

回答

14

這應該工作

var url = 'example.com/hello/world/20111020/'; 
//get rid of the trailing/before doing a simple split on/
var url_parts = url.replace(/\/\s*$/,'').split('/'); 
//since we do not need example.com 
url_parts.shift(); 

現在url_parts將指向數組["hello", "world", "20111020"]

+0

'var url = window.location.href;'解析當前網址:) –

+0

這對我不起作用。我只得到example.com。 – johnny

+0

@johnny你應該獲取'url_parts'數組的內容,而不是命令'url_parts.shift()'的輸出。 –

3

可以使用jQuery-URL-Parser插件:

var file = $.url.attr("file"); 

在你的情況,你可能想使用segment()

var segments = $.url('http://allmarkedup.com/folder/dir/example/index.html').segment(); 

// segments = ['folder','dir','example','index.html'] 
2
<script type="text/javascript"> 
    function splitThePath(incomingUrl){ 
    var url = document.createElement("a"); 
    url.href = incomingUrl; 
    //url.hash Returns the anchor portion of a URL 
    //url.host Returns the hostname and port of a URL 
    //url.hostname Returns the hostname of a URL 
    //url.href Returns the entire URL 
    //url.pathname Returns the path name of a URL 
    //url.port Returns the port number the server uses for a URL 
    //url.protocol Returns the protocol of a URL 
    //url.search Returns the query portion of a URL 
    if(url.pathname && url.pathname != ""){ 
    var pathnameArray = url.pathname.split("/"); 
}else{ 

} 


} 
</script> 
+0

當您設置url.href第一次設置時,客戶端的瀏覽器會填充其餘的值。 – DefyGravity

0

我已經創建了下面的正則表達式的URL

^https?://(((0|([1-9][0-9]{0,1}))(\.(0|([1-9][0-9]{0,1}))){3})|([a-zA-Z]([a-zA-Z0-9$\[email protected]\.&+!*"\'\(\),]|(%[0-9a-fA-F][0-9a-fA-F]))*(\.([a-zA-Z]([a-zA-Z0-9$\[email protected]\.&+!*"\'\(\),]|(%[0-9a-fA-F][0-9a-fA-F]))*))*))(/|((/([a-zA-Z]([a-zA-Z0-9$\[email protected]\.&+!*"\'\(\),]|(%[0-9a-fA-F][0-9a-fA-F]))*))*))$ 

它是爲MySql編寫的 - 我肯定有一點小小的煩惱,你可以根據自己的需求來獲取它。

順便說一句 - 我把這個想法從RFC - 數逃脫我在這個時刻

+1

這到底是什麼?看起來令人印象深刻 – Squirrl

0

對於解析URL,一種不同的方法可以使用錨定DOM對象。

var a = document.createElement("A"); 
a.href = 'http://example.com:8080/path/to/resources?param1=val1&params2=val2#named-anchor'; 

a.protocol; // http: 
a.host; // example.com:8080 
a.hostname; //example.com 
a.port; // 8080 (in case of port 80 empty string returns) 
a.pathname; // /path/to/resources 
a.hash; // #named-anchor 
a.search // ?param1=val1&params2=val2