Последний сегмент URL

Как получить последний сегмент url-адреса? У меня есть следующий скрипт, который отображает полный url-адрес якорного тега:

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

если url-адрес

http://mywebsite/folder/file

Как заставить его отображать только часть "файл" url-адреса в окне предупреждения?

22 ответов


вы также можете использовать lastIndexOf() функция для обнаружения последнего вхождения / символ в вашем URL, затем substr () функция для возврата подстроки, начиная с этого места:

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

таким образом, вы избежите создания массива, содержащего все ваши сегменты URL, как split() делает.


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

console.log(lastSegment);

window.location.pathname.split("/").pop()

просто еще одно решение с регулярным выражением.

var href = location.href;
console.log(href.match(/([^\/]*)\/*$/)[1]);

Javascript имеет функцию split, связанную со строковым объектом, которая может вам помочь:

var url = "http://mywebsite/folder/file";
var array = url.split('/');

var lastsegment = array[array.length-1];

или вы можете использовать регулярное выражение:

alert(href.replace(/.*\//, ''));

var urlChunks = 'mywebsite/folder/file'.split('/');
alert(urlChunks[urlChunks.length - 1]);

Я знаю, уже слишком поздно, но для других: Я!--4-->очень рекомендации по применению плагин PURL jquery. Мотивация для PURL заключается в том, что url-адрес может быть сегментирован '#' too (пример: угловой.JS links), т. е. url может выглядеть как

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

или

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

и с PURL вы можете легко решить (сегмент / fsegment), какой сегмент вы хотите получить.

для "классического" последнего сегмента вы можете написать:

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

основываясь на ответе Фредерика, используя только javascript:

var url = document.URL

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

и

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

Если вы не беспокоитесь о создании дополнительных элементов с помощью split, то фильтр может справиться с проблемой, которую вы упомянули о конечной косой черте (при условии, что у вас есть поддержка браузера для фильтра).

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 = one

Если Ваш url выглядит так:

http://test.com/one/

или

http://test.com/one

или

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

тогда loc в конечном итоге выглядит так: http://test.com/one

теперь, так как вы хотите последний элемент, запустите следующий шаг для загрузки значения (targetValue), которое вы изначально хотели.

var targetValue = loc.substr(loc.lastIndexOf('/') + 1);

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

используйте уроженца pathname свойство, потому что оно самое простое и уже было проанализировано и разрешено браузером. $(this).attr("href") может возвращать значения типа ../.., который не даст вам правильный результат.

Если вам нужно сохранить search и hash (например,foo?bar#baz С http://quux.com/path/to/foo?bar#baz) использовать это:

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

скопировал из ответ


чтобы получить последний сегмент текущего окна:

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


обновленный raddevus ответ:

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

печатает последний путь url как строку:

test.com/path-name = path-name

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

Я считаю, что безопаснее удалить косую черту хвоста ('/ ' ) перед выполнением подстроки. Потому что в моем сценарии пустая строка.

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

Я использую regex и split:

var last_path = местоположение.хреф.спичка./(/(.[\w])/) [1].split ("# " ) [0].сплит("?")[0]

В конце концов он будет игнорировать # ? & / окончание URL-адресов, что часто случается. Пример:

https://cardsrealm.com/profile/cardsRealm - > возвращает cardsRealm

https://cardsrealm.com/profile/cardsRealm#hello -> возвращает cardsRealm

https://cardsrealm.com/profile/cardsRealm?hello - > возвращает cardsRealm

https://cardsrealm.com/profile/cardsRealm/ - > возвращает cardsRealm


вы можете сначала удалить, если есть / в конце, а затем получить последнюю часть 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);

ответы выше могут работать, если путь прост, состоящий только из простых элементов пути. Но когда он также содержит параметры запроса, они ломаются.

лучше использовать URL-адресом


это чувствует себя немного чище:

var url = 'http://mywebsite/folder/file';

var lastSegment = url.split('/').slice(-1).join(); 

console.log(lastSegment);

Я действительно не знаю, является ли регулярное выражение правильным способом решения этой проблемы, поскольку оно действительно может повлиять на эффективность вашего кода, но приведенное ниже регулярное выражение поможет вам получить последний сегмент, и оно все равно даст вам последний сегмент, даже если URL-адрес сопровождается пустым /. Регулярное выражение, которое я придумал:

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