我想使用regex和replace方法从JavaScript中获取绝对URL的相对URL。
我尝试了以下操作,但它无法正常工作:
var str="http://localhost/mypage.jsp";
document.write(str.replace("^[\w]*\/\/[\w]*$",""));
答案 0 :(得分:52)
执行此操作的一种好方法是使用浏览器的本机链接解析功能,使用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
对象的属性相同。
答案 1 :(得分:24)
如果“相对网址”是指第一个/
之后的字符串部分,那么很简单:
document.write(str.replace(/^(?:\/\/|[^\/]+)*\//, ""));
这匹配字符串中第一个单/
的所有字符,并用空字符串替换它们。
在:http://localhost/my/page.jsp
- >出:/my/page.jsp
答案 2 :(得分:21)
以下代码段返回页面的绝对网址。
var myURL = window.location.protocol + "//" + window.location.host + window.location.pathname;
如果您只需要相对网址,请使用以下代码段
var myURL=window.location.pathname;
结帐get relative URL using Javascript了解更多详情和实现相同功能的多种方法。
答案 3 :(得分:5)
不要使用像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"
答案 4 :(得分:1)
不要忘记\
是字符串中的转义字符,因此如果您想在字符串中编写正则表达式,请确保为所需的每个\
键入\
两次。示例:/\w/
→"\\w"
答案 5 :(得分:1)
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";
答案 6 :(得分:0)
下面您可以找到脚本,在这里我们只有一个问题,即一项手动工作,我们要添加split属性,即,如果您的站点链接为:Get relative URL from absolute URL
我们要输入如下网址: / questions / 6263454 / get-relative-url-from-absolute-url
因此,在下面的代码中,我们必须添加.com而不是.net,即, var res = at.split(“。net”);在这里,我们要根据需要添加内容,现在我需要在.com之后进行分隔,因此代码将为“ var res = at.split(“。com”);“。
如果您仍然怀疑,请告诉我,我想你们已经明白了 并通过检查以下内容查看代码更改:
$(document).ready(function(){
$("a").each(function(){
var at= $(this).attr("href");
var res = at.split(".net");
var res1 = res[0];
var res2 = res[1];
alert(res2);
$(this).attr("href",res2);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="banner-message">
<p>Hello World</p>
<a href="https://jsfiddle.net/boilerplate/jquery2">Change color</a>
</div>
<div id="banner-message">
<p>Hello World</p>
<a href="https://jsfiddle.net/boilerplate/jquery3">Change color</a>
</div>
答案 7 :(得分:0)
const url = new URL(absoluteUrl);
const rel = url.toString().substring(url.origin.length)