Я хочу получить относительный URL-адрес из абсолютного URL-адреса в JavaScript с помощью regex и метода replace.
Я пробовал следующее, но он не работает:
var str="http://localhost/mypage.jsp";
document.write(str.replace("^[\w]*\/\/[\w]*$",""));
Я хочу получить относительный URL-адрес из абсолютного URL-адреса в JavaScript с помощью regex и метода replace.
Я пробовал следующее, но он не работает:
var str="http://localhost/mypage.jsp";
document.write(str.replace("^[\w]*\/\/[\w]*$",""));
Если по "относительному URL" вы понимаете часть строки после первого сингла /
, тогда это просто:
document.write(str.replace(/^(?:\/\/|[^\/]+)*\//, ""));
Это соответствует всем символам до первого сингла /
в строке и заменяет их пустой строкой.
In: http://localhost/my/page.jsp
→ Out: /my/page.jsp
Хороший способ сделать это - использовать собственные возможности разбора ссылок на браузер, используя элемент a
:
function getUrlParts(url) {
var a = document.createElement('a');
a.href = url;
return {
href: a.href,
host: a.host,
hostname: a.hostname,
port: a.port,
pathname: a.pathname,
protocol: a.protocol,
hash: a.hash,
search: a.search
};
}
Затем вы можете получить доступ к имени пути с помощью getUrlParts(yourUrl).pathname
.
Свойства те же, что и для объекта location
.
Ниже фрагмента возвращает абсолютный URL страницы.
var myURL = window.location.protocol + "//" + window.location.host + window.location.pathname;
Если вам нужен только относительный URL-адрес, просто используйте ниже фрагмент
var myURL=window.location.pathname;
Оформить заказ получить относительный URL-адрес с помощью Javascript для получения более подробной информации и нескольких способов достижения такой же функциональности.
Не используйте низкоуровневые вещи, такие как regexp и т.д. Эти вещи были решены многими другими людьми. Особенно случаи кросс.
Посмотрите URI.js, он должен выполнить задание: http://medialize.github.io/URI.js/docs.html#relativeto
var uri = new URI("/relative/path");
// make path relative
var relUri = uri.relativeTo("/relative/sub/foo/sub/file"); // returns a new URI instance
// relUri == "../../../path"
не забывайте, что \
является escape-символом в строках, поэтому, если вы хотите писать регулярное выражение в строках, убедитесь, что вы набираете \
дважды для каждого \
, который вам нужен. Пример: /\w/
→ "\\w"
URL.getRelativeURL
Существует расширение общедоступного домена для стандартного объекта URL
, называемого getRelativeURL
.
Он получил несколько интересных трюков, таких как перезагрузка силы, вы должны проверить это!
Пример использования
//syntax: <URL to convert>.getRelativeURL(<relative to this URL>)
//link from Mypage to Google
a = new URL("https://google.com/search");
a.getRelativeURL("https://mypage.com")
== "//google.com/search";
//link from the current location.href
a.getRelativeURL();
//link from Olutsee to Polk
var from = new URL("http://usa.com/florida/baker/olutsee");
var to = new URL("http://usa.com/florida/polk");
to.getRelativeURL(from) == "../../polk";