#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;
}
Комментарии:
1. Обратите внимание, что Internet Explorer, похоже, не включает начальную косую черту, поэтому вам придется учитывать это.
2. @musicfreak Это, похоже, не влияет на это (если я не сделал что-то неправильно). jsFiddle .
3. Нет, нет, вы не сделали ничего плохого, я просто делал пометку на случай, если кто-то захочет адаптировать эту идею для чего-то другого. Извините за недоразумение.