Получить каталог с косой чертой URL или без нее? - PullRequest
0 голосов
/ 02 января 2019

Вот мой текущий код:

var loc = window.location.pathname;
var str = loc.substring(0, loc.lastIndexOf('/'));
var subid = str.replace("/", "");

Когда я перехожу к http://example.com/12345/, тогда subid равняется 12345.

Но когда я перехожу к http://example.com/12345, тогдаsubid пусто.

Как я могу заставить эту работу работать с косой чертой или без нее?

Ответы [ 5 ]

0 голосов
/ 03 января 2019

Столько излишеств и кода, которые не работают в старых браузерах в других ответах. Это так просто:

var subid = location.pathname.match(/^\/([^\/]*)/)[1];

Вы можете присвоить результат match другой переменной и добавить дополнительные группировки в регулярное выражение, если вам нужно захватить и другие сегменты.

0 голосов
/ 02 января 2019

Попробуйте это.

    var loc="http://example.com/12340/";
    if((loc.length-1)==loc.lastIndexOf('/'))
    {

        var newloc=loc.substring(0,loc.length-1);
        var subid=newloc.substring((newloc.lastIndexOf('/')+1),newloc.length);
    }
    else
    {
        var subid=loc.substring((loc.lastIndexOf('/')+1),loc.length);
    }
    console.log("sub is "+subid);
0 голосов
/ 02 января 2019

Вы можете воспользоваться встроенной функцией URL

(new URL('http://example.com/12345/')).pathname.replace(/\//g,'') // output 12345
(new URL('http://example.com/12345')).pathname.replace(/\//g,'') // output 12345

Тот, кто ищет только последний сегмент, может использовать эту функцию

var allPartsOfURL = 'http://example.com/12345/12/98/567'.split('/');
// handle potential trailing slash
var lastSegment = allPartsOfURL.pop() || allPartsOfURL.pop();  


console.log(lastSegment);

Для старых браузеров

// create an anchor tag 
const url = document.createElement('a');
// set the href attribute and then use the `pathname`
url.setAttribute('href', 'http://example.com/12345/');
url.pathname.replace(/\//g,''); // output 12345

url.setAttribute('href', 'http://example.com/12345');
url.pathname.replace(/\//g,''); // output 12345
0 голосов
/ 02 января 2019

Если вы считаете регулярное выражение,

var loc = window.location.pathname;
var subid = loc.match(/^http[s]?:\/\/.*?\/([a-zA-Z-_]+).*$/)[1];

Тест с различными случаями

var url1 = "http://google.com/abc-1";
var url2 = "http://google.com/abc-2/";
var subid1 = url1.match(/^http[s]?:\/\/.*?\/([a-zA-Z-_]+).*$/)[1];
var subid2 = url2.match(/^http[s]?:\/\/.*?\/([a-zA-Z-_]+).*$/)[1];
console.log(subid1);
console.log(subid2);
0 голосов
/ 02 января 2019

если вы хотите извлечь последнюю часть строки, вы можете использовать

loc.substring(loc.lastIndexOf('/')).replace('/','');

в случае последней '/ первой проверки методом .endsWith('/') и затем удалить последнюю' / 'с помощью

if(loc.endsWith('/')) {
   loc.substring( -1, loc.lastIndexOf('/')).replace('/','');
}

альтернативный способ

 loc.split('/').filter( path => !path).pop();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...