Último segmento de URL

Como obtenho o último segmento de um URL? Eu tenho o seguinte script que exibe o URL completo da tag de âncora clicada:

$(".tag_name_goes_here").live('click', function(event) { event.preventDefault(); alert($(this).attr("href")); }); 

Se o URL for

 http://mywebsite/folder/file 

Como posso obtê-lo apenas para exibir a parte “arquivo” do URL na checkbox de alerta?

Você também pode usar a function lastIndexOf () para localizar a última ocorrência do caractere / em seu URL e, em seguida, a function substr () para retornar a substring a partir desse local:

 window.alert(this.href.substr(this.href.lastIndexOf('/') + 1)); 

Dessa forma, você evitará a criação de um array contendo todos os seus segmentos de URL, como o split() faz.

 var parts = 'http://mywebsite/folder/file'.split('/'); var lastSegment = parts.pop() || parts.pop(); // handle potential trailing slash console.log(lastSegment); 

Apenas outra solução com regex.

 var href = location.href; console.log(href.match(/([^\/]*)\/*$/)[1]); 
 window.location.pathname.split("/").pop() 

O Javascript tem a divisão da function associada ao object string que pode ajudá-lo:

 var url = "http://mywebsite/folder/file"; var array = url.split('/'); var lastsegment = array[array.length-1]; 

Ou você poderia usar uma expressão regular:

 alert(href.replace(/.*\//, '')); 
 var urlChunks = 'mywebsite/folder/file'.split('/'); alert(urlChunks[urlChunks.length - 1]); 

Eu sei, é tarde demais, mas para os outros: eu altamente recomendado o uso do plugin jquery PURL . A motivação para o PURL é que o URL também pode ser segmentado por ‘#’ (exemplo: links angular.js), ou seja, o URL pode parecer

  http://test.com/#/about/us/ 

ou

  http://test.com/#sky=blue&grass=green 

E com o PURL você pode decidir facilmente (segmento / segmento) qual segmento você deseja obter.

Para o último segmento “clássico”, você poderia escrever:

  var url = $.url('http://test.com/dir/index.html?key=value'); var lastSegment = url.segment().pop(); // index.html 

Com base na resposta de Frédéric usando apenas o javascript:

 var url = document.URL window.alert(url.substr(url.lastIndexOf('/') + 1)); 

Além disso,

 var url = $(this).attr("href"); var part = url.substring(url.lastIndexOf('/') + 1); 

Se você não estiver preocupado em gerar os elementos extras usando a divisão, o filtro poderá lidar com o problema mencionado na barra à direita (Supondo que você tenha suporte ao navegador para filtro).

 url.split('/').filter(function (s) { return !!s }).pop() 
 // Store original location in loc like: http://test.com/one/ (ending slash) var loc = location.href; // If the last char is a slash trim it, otherwise return the original loc loc = loc.lastIndexOf('/') == (loc.length -1) ? loc.substr(0,loc.length-1) : loc.substr(0,loc.lastIndexOf('/')); var targetValue = loc.substr(loc.lastIndexOf('/') + 1); 

targetValue = um

Se o seu URL se parece com:

http://test.com/one/

ou

http://test.com/one

ou

http://test.com/one/index.htm

Em seguida, a loc acaba parecendo: http://test.com/one

Agora, desde que você deseja o último item, execute a próxima etapa para carregar o valor (targetValue) desejado originalmente.

 var targetValue = loc.substr(loc.lastIndexOf('/') + 1); 
 window.alert(this.pathname.substr(this.pathname.lastIndexOf('/') + 1)); 

Use a propriedade do pathname nativo porque é mais simples e já foi analisado e resolvido pelo navegador. $(this).attr("href") pode retornar valores como ../.. que não lhe daria o resultado correto.

Se você precisar manter a search e o hash (por exemplo, foo?bar#baz de http://quux.com/path/to/foo?bar#baz ) use este:

 window.alert(this.pathname.substr(this.pathname.lastIndexOf('/') + 1) + this.search + this.hash); 
 var pathname = window.location.pathname; // Returns path only var url = window.location.href; // Returns full URL 

Copiado desta resposta

Para obter o último segmento da sua janela atual:

window.location.href.substr(window.location.href.lastIndexOf('/') +1)

Resposta raddevus atualizada:

 var loc = window.location.href; loc = loc.lastIndexOf('/') == loc.length - 1 ? loc.substr(0, loc.length - 1) : loc.substr(0, loc.length + 1); var targetValue = loc.substr(loc.lastIndexOf('/') + 1); 

Imprime o último caminho da url como string:

 test.com/path-name = path-name test.com/path-name/ = path-name 

Eu acredito que é mais seguro remover a barra (‘/’) antes de fazer substring. Porque eu tenho uma string vazia no meu cenário.

 window.alert((window.location.pathname).replace(/\/$/, "").substr((window.location.pathname.replace(/\/$/, "")).lastIndexOf('/') + 1)); 

Eu estou usando regex e split:

var last_path = location.href.match (/. / (. [\ w]) /) [1] .split (“#”) [0] .split (“?”) [0]

No final, irá ignorar #? e / terminando urls, o que acontece muito. Exemplo:

https://cardsrealm.com/profile/cardsRealm -> Retorna cardsRealm

https://cardsrealm.com/profile/cardsRealm#hello -> Retorna cardsRealm

https://cardsrealm.com/profile/cardsRealm?hello -> Devolve cartõesRealm

https://cardsrealm.com/profile/cardsRealm/ -> Retorna cardsRealm

você pode primeiro remover se houver / no final e, em seguida, obter a última parte do URL

 let locationLastPart = window.location.pathname if (locationLastPart.substring(locationLastPart.length-1) == "/") { locationLastPart = locationLastPart.substring(0, locationLastPart.length-1); } locationLastPart = locationLastPart.substr(locationLastPart.lastIndexOf('/') + 1); 

As respostas acima podem funcionar se o caminho for simples, consistindo apenas em elementos de caminho simples. Mas quando contém params de consulta, eles quebram.

Melhor usar o object URL para isso, em vez de obter uma solução mais robusta. É uma interpretação do URL presente:

Entrada: const href = 'https://stackoverflow.com/boo?q=foo&s=bar'

 const last = new URL(href).pathname.split('/').pop(); console.log(last); 

Saída: 'boo'

Isso parece um pouco mais limpo:

 var url = 'http://mywebsite/folder/file'; var lastSegment = url.split('/').slice(-1).join(); console.log(lastSegment); 

Eu realmente não sei se regex é o caminho certo para resolver esse problema, pois pode realmente afetar a eficiência do seu código, mas o regex abaixo ajudará você a buscar o último segmento e ainda lhe dará o último segmento, mesmo que o URL é seguido por um vazio / . O regex que eu criei é:

 [^\/]+[\/]?$