Последний сегмент URL
Как получить последний сегмент URL-адреса? У меня есть следующий script, который отображает полный URL-адрес привязанного тега:
$(".tag_name_goes_here").live('click', function(event)
{
event.preventDefault();
alert($(this).attr("href"));
});
Если URL-адрес
http://mywebsite/folder/file
как мне его получить, чтобы отобразить "файл" в URL-адресе в поле предупреждения?
Ответы
Ответ 1
Вы также можете использовать функцию lastIndexOf(), чтобы найти последнее вхождение символа /
в вашем URL, а затем функцию substring(), чтобы вернуть подстроку, начиная с этого местоположения:
console.log(this.href.substring(this.href.lastIndexOf('/') + 1));
Таким образом, вы избежите создания массива, содержащего все ваши сегменты URL, как это делает split()
.
Ответ 2
var parts = 'http://mywebsite/folder/file'.split('/');
var lastSegment = parts.pop() || parts.pop(); // handle potential trailing slash
console.log(lastSegment);
Ответ 3
window.location.pathname.split("/").pop()
Ответ 4
Простое решение с регулярным выражением.
var href = location.href;
console.log(href.match(/([^\/]*)\/*$/)[1]);
Ответ 5
Javascript имеет функцию split, связанную с строковым объектом, которая может вам помочь:
var url = "http://mywebsite/folder/file";
var array = url.split('/');
var lastsegment = array[array.length-1];
Ответ 6
Или вы можете использовать регулярное выражение:
alert(href.replace(/.*\//, ''));
Ответ 7
Другие ответы могут работать, если путь простой, состоящий только из простых элементов пути. Но когда он также содержит параметры запроса, они ломаются.
Для этого лучше использовать объект URL, чтобы получить более надежное решение. Это разобранная интерпретация настоящего URL:
Входные данные: const href= 'https://stackoverflow.com/boo?q=foo&s=bar'
const last = new URL(href).pathname.split('/').pop();
console.log(last);
Вывод: 'boo'
Это работает для всех распространенных браузеров. Только наш умирающий IE не поддерживает это (и не будет). Для IE есть полифиллы, доступные (хотя, если вам все равно).
Ответ 8
var urlChunks = 'mywebsite/folder/file'.split('/');
alert(urlChunks[urlChunks.length - 1]);
Ответ 9
Я знаю, уже слишком поздно, но для других:
I высоко рекомендуется использовать PURL jquery plugin. Мотивация для PURL заключается в том, что URL-адрес может быть сегментирован с помощью '#' (пример: angular.js-ссылки), то есть 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
Ответ 10
Основываясь на Frédéric, используя только javascript:
var url = document.URL
window.alert(url.substr(url.lastIndexOf('/') + 1));
Ответ 11
Кроме того,
var url = $(this).attr("href");
var part = url.substring(url.lastIndexOf('/') + 1);
Ответ 12
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);
Ответ 13
Если вы не беспокоитесь о создании дополнительных элементов с помощью разделения, тогда фильтр может справиться с проблемой, о которой вы упоминаете в завершающей косой чертой (предположим, что у вас есть поддержка браузера для фильтра).
url.split('/').filter(function (s) { return !!s }).pop()
Ответ 14
// 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);
Ответ 15
var pathname = window.location.pathname; // Returns path only
var url = window.location.href; // Returns full URL
Скопировано из этого ответа
Ответ 16
Чтобы получить последний сегмент текущего окна:
window.location.href.substr(window.location.href.lastIndexOf('/') +1)
Ответ 17
Возвращает последний сегмент независимо от конечных слешей:
var val = 'http://mywebsite/folder/file//'.split('/').filter(Boolean).pop();
console.log(val);
Ответ 18
Обновленный ответ 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
Ответ 19
вы можете сначала удалить, если есть/в конце, а затем получить последнюю часть 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);
Ответ 20
Я считаю, что безопаснее удалить косую черту ('/') перед выполнением подстроки. Потому что я получил пустую строку в моем сценарии.
window.alert((window.location.pathname).replace(/\/$/, "").substr((window.location.pathname.replace(/\/$/, "")).lastIndexOf('/') + 1));
Ответ 21
Я использую регулярное выражение и разделить:
var last_path = location.href.match(/./(. [\ w])/) [1].split("#") [0].split("?") [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
Ответ 22
Я на самом деле не знаю, является ли регулярное выражение правильным способом решения этой проблемы, поскольку оно может реально повлиять на эффективность вашего кода, но приведенное ниже регулярное выражение поможет вам получить последний сегмент и все равно даст вам последний сегмент, даже если URL-адрес сопровождается пустой /
. Регулярное выражение, которое я придумал:
[^\/]+[\/]?$
Ответ 23
// https://x.com/boo/?q=foo&s=bar = boo
// https://x.com/boo?q=foo&s=bar = boo
// https://x.com/boo/ = boo
// https://x.com/boo = boo
const segment = new
URL(window.location.href).pathname.split('/').filter(Boolean).pop();
console.log(segment);
Работает для меня.
Ответ 24
var url = window.location.pathname;
var urlsplit = url.split("/");
var result= urlsplit[urlsplit.length-1];
result will get the Last segment of URL
Ответ 25
Я знаю, что это старый, но если вы хотите получить это из URL, вы можете просто использовать:
document.location.pathname.substring(document.location.pathname.lastIndexOf('/.') + 1);
document.location.pathname
получает путь от текущего URL. lastIndexOf
получить индекс последнего вхождения следующего регулярного выражения, в нашем случае это /.
, Точка означает любой символ, поэтому он не будет учитываться, если /
является последним символом в URL. substring
обрезает строку между двумя индексами.