Регулярное выражение Javascript, чтобы избавиться от последней части URL-адреса — после последней косой черты

#javascript #regex #url

#javascript #регулярное выражение #url

Вопрос:

По сути, мне нужно регулярное выражение JS, чтобы удалить последнюю часть URL. Загвоздка в том, что, хотя, если это просто доменное имя, например http://google.com , я не хочу, чтобы что-то менялось.

Ниже приведены примеры. Любая помощь приветствуется.

 http://google.com -> http://google.com
http://google.com/ -> http://google.com
http://google.com/a -> http://google.com
http://google.com/a/ -> http://google.com/a
http://domain.com/subdir/ -> http://domain.com/subdir
http://domain.com/subfile.extension -> http://domain.com
http://domain.com/subfilewithnoextension -> http://domain.com
  

Ответ №1:

Я нашел это проще без использования регулярных выражений.

 var removeLastPart = function(url) {
    var lastSlashIndex = url.lastIndexOf("/");
    if (lastSlashIndex > url.indexOf("/")   1) { // if not in http://
        return url.substr(0, lastSlashIndex); // cut it off
    } else {
        return url;
    }
}
  

Пример результатов:

 removeLastPart("http://google.com/")        == "http://google.com"
removeLastPart("http://google.com")         == "http://google.com"
removeLastPart("http://google.com/foo")     == "http://google.com"
removeLastPart("http://google.com/foo/")    == "http://google.com/foo"
removeLastPart("http://google.com/foo/bar") == "http://google.com/foo"
  

Ответ №2:

Я воспользовался HTMLAnchorElement в DOM.

 function returnLastPathSegment(url) {
   var a = document.createElement('a');
   a.href = url;

    if ( ! a.pathname) {
        return url;
    }

    a.pathname = a.pathname.replace(//[^/] $/, '');
    return a.href;
}
  

jsFiddle.

Комментарии:

1. Обратите внимание, что Internet Explorer, похоже, не включает начальную косую черту, поэтому вам придется учитывать это.

2. @musicfreak Это, похоже, не влияет на это (если я не сделал что-то неправильно). jsFiddle .

3. Нет, нет, вы не сделали ничего плохого, я просто делал пометку на случай, если кто-то захочет адаптировать эту идею для чего-то другого. Извините за недоразумение.