Последний сегмент 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 обрезает строку между двумя индексами.