假设我有字符串
"https://www.example.com/example/path.php"
......例如。
我怎么才能从字符串中获取最终路径(所以只有example/path.php
)?
我似乎有一些正则表达式,它实现了我正在寻找的东西,然而,它只会摆脱https:
。正则表达式适用于www.example.com/example/path.php
,但没有别的。
基本上, [原始字符串] - > [新字符串]
https://www.example.com/example/path.php - >例如/ path.php
www.example.com/example/path.php - >例如/ path.php
/example/path.php - >例如/ path.php
path.php - > path.php
干杯。
答案 0 :(得分:2)
你可以这样做(不使用regex
或任何API的解决方案):
let exclude = "www.example.com/";
let testURLs = ["https://www.example.com/example/path.php","www.example.com/example/path.php","/example/path.php","/example/example2/path.php","path.php"];
testURLs.forEach(url => {
console.log(url.substring(url.indexOf(exclude) != -1 ? (url.indexOf(exclude) + exclude.length) : url.indexOf('/') != 0 ? 0 : 1 , url.length))
})
答案 1 :(得分:1)
好的,这是我的理由。适用于http
,其他域名,例如.org
和更长的网址:
let domainMatch = /[a-z]{3}\.[a-z]{3,32}\.[a-z]{2,3}/,
testStrings = ["https://www.example.com/example/path.php",
"www.example.com/example/path.php",
"/example/path.php",
"path.php",
"http://www.example.org/example1/example2/path.php"
]
let results = testStrings.map(str =>
str.split("/")
.filter(word => word.length && !(word.includes("http") || domainMatch.test(word)))
.join("/")
)
console.log(results)
答案 2 :(得分:0)
您认为想要的部分究竟是什么?
是从第二个到最后一个/到字符串的结尾吗?
您可以在/上拆分字符串,然后将/
之间的最后两部分连接起来。
var parts = window.location.href.split("/");
var result = parts[parts.length-2] + "/" + parts[parts.length-1];
如果您希望删除某些常量部分,可以尝试:
var result = window.location.href.replace("constant part you wish to remove", "");
答案 3 :(得分:0)
您需要找到不属于协议的第一个/
,因此如果有//
则忽略/
,然后只需阅读下一个var urls = ["https://www.example.com/example/path.php", "www.example.com/example/path.php", "/example/path.php", "path.php", "//www.xxx.com", "ftp://www.xxx.com/"];
for (var i = 0; i < urls.length; i++) {
var url = urls[i];
// where to read from?
var from = url.indexOf("//");
from += (from >= 0 ? 2 : 1);
// find the next / beyond that
var to = url.indexOf("/", from);
// read between, handling the case where / is the last character
url = (from > 0 && to < 0) ? "" : url.substr(to + 1);
console.log(urls[i], "=>", url);
}
findNearest3 <- function(x, y, z){
temp <- sort(x[x > z[1] & x < z[2]])
point <- which(abs(temp-y)==min(abs(temp-y)))
return(temp[c(point-1, point, point+1)])
}
&#13;
答案 4 :(得分:-1)
The URL API可以轻松操作以下网址:
["https://www.example.com/example/path.php", "www.example.com/example/path.php", "/example/path.php", "path.php"]
.forEach(url => console.log(new URL(url, location.href).pathname));
&#13;
...虽然在主机名之前错过了方案的网址错误无法正确。
答案 5 :(得分:-1)
与使用URL API(浏览器不完全支持)类似,您可以创建<a>
元素并设置href属性,然后从该元素中获取pathname
等属性。
对于没有协议的域,此解决方案也会失败,因此您需要进行一些解析/验证。像URI.js这样的图书馆可能会帮助你
如果你知道域/主机应该是什么......那么当<a>
不是预期的时候,a.host
也很容易检查和设置,同样的a.protocol
["https://www.example.com/example/path.php", "www.example.com/example/path.php", "/example/path.php", "path.php"]
.forEach(url => {
var a = document.createElement('a');
a.setAttribute('href', url)
console.log(a.pathname.slice(1));
});
&#13;