2011-10-20 18 views
5

Ok Diciamo che ho un URLURL parse con JavaScript o jQuery

example.com/hello/world/20111020 (con o senza la barra finale). Quello che mi piacerebbe fare è rimuovere dall'URL il dominio example.com. e poi rompere il mondo Hello 20111020 in un array. Ma il mio altro problema è A volte l'URL non ha/ciao/mondo/20.111.020 o solo/ciao/quindi ho bisogno di stabilire prima se c'è qualcosa dopo example.com se non ci, poi non fare nulla, come, ovviamente, non c'è nulla su cui lavorare. Comunque se c'è qualcosa lì per ogni/ho bisogno di aggiungerlo a questo array in ordine. Quindi posso lavorare con l'array [0] e sapere che è stato fatto.

ho provato qualcosa un paio di giorni indietro, ma era in esecuzione in problemi con trailing slash ha mantenuto rompendo la sceneggiatura, ho purtroppo abbandonato questa idea. E oggi sto cercando nuove idee.

risposta

14

Questo dovrebbe funzionare

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(); 

Ora url_parts punterà alla matrice ["hello", "world", "20111020"].

+0

'var url = window.location.href;' per analizzare URL corrente :) –

+0

Questo non funziona per me. Ho solo example.com. – johnny

+0

@johnny Si dovrebbe prendere il contenuto di 'matrice url_parts' e non l'output del comando' url_parts.shift() ' –

3

È possibile utilizzare il jQuery-URL-Parser plugin:

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

Nel tuo caso si sarebbe probabilmente desidera utilizzare 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

quando si imposta url.href viene impostato per la prima volta, il browser del client riempie il resto dei valori. – DefyGravity

0

ho creato la seguente espressione regolare per gli 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]))*))*))$ 

È stato scritto per MySql - sono sicuro che con un po 'di giocherellando puoi farlo funzionare per le tue esigenze.

BTW - Ho preso l'idea da un RFC - Il numero mi sfugge in questo momento

+1

che diavolo è ??? sembra impressionante – Squirrl

0

Per gli URL parsing, un approccio diverso può fare uso di oggetti di ancoraggio 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