我正在尝试删除 URL 的最后一个目录部分。我的网址如下所示:
https://my_ip_address:port/site.php?path=/path/to/my/folder
.
单击按钮时,我想将其更改为
https://my_ip_address:port/site.php?path=/path/to/my
。 (删除最后一部分)。
我已经尝试过
window.location.replace(/\/[A-Za-z0-9%]+$/, "")
,结果是
https://my_ip_address:port/undefined
.
我应该使用什么正则表达式来执行此操作?
通过使用此代码从 Url 链接中删除最后一个元素。
url.substring(0, url.lastIndexOf('/'));
解释:用“/”进行爆炸,用pop删除最后一个元素,用“/”再次连接。
function RemoveLastDirectoryPartOf(the_url)
{
var the_arr = the_url.split('/');
the_arr.pop();
return( the_arr.join('/') );
}
另一种删除目录路径末尾的方法:
path.normalize(path.join(thePath, '..'));
我建议使用的最简单方法是混合使用 split、slice 和 join:
const baseUrl = 'https://my_ip_address:12345/site.php?path=/path/to/my/folder';
const newUrl = baseUrl.split('/').slice(0, -1).join('/');
上面的代码有一个问题 - 当路径以斜杠结束时
/
它只会删除斜杠而不删除最后一个路径块。我们可以通过在 .filter(Boolean)
之前添加 .slice(0, -1)
来解决这个问题,但是如果 URL 有协议,它将用 //
替换 /
。
因此,在更复杂的情况下,我建议使用这个安全的选项:
const baseUrl = 'https://my_ip_address:12345/site.php?path=/path/to/my/folder';
function removeLastDirectoryFromUrlSearchParam(baseUrl, paramName = 'path') {
const url = new URL(baseUrl);
const params = new URLSearchParams(url.search);
const path = params.get(paramName);
params.set(paramName, path.split('/').filter(Boolean).slice(0, -1).join('/'));
url.search = params.toString();
return url.toString();
}
const newUrl = removeLastDirectoryFromUrlSearchParam(baseUrl);
以下是一些正确处理
/
、“”、foo
和 /foo
的代码(分别返回 /
、“”、foo
和 /
):
function parentDirectory(dir: string): string {
const lastSlash = dir.lastIndexOf('/');
if (lastSlash === -1) {
return dir;
}
if (lastSlash === 0) {
return '/';
}
return dir.substring(0, lastSlash);
}
只需删除 Javascript 的
:string
即可。也许您想要不同的行为,但您至少应该考虑这些边缘情况。
坚持使用本机库,
dirname
可能会有所帮助。
在
node
(后端)
const path = require('path')
let str='https://my_ip_address:port/site.php?path=/path/to/my/folder'
console.log(path.dirname(n))
console.log(path.dirname(n)+'/')
输出是
'https://my_ip_address:port/site.php?path=/path/to/my'
'https://my_ip_address:port/site.php?path=/path/to/my'
在 Firefox 浏览器中(请参阅 MDN、路径操作、OS.Path.dirname])
let str='https://my_ip_address:port/site.php?path=/path/to/my/folder'
console.log(OS.path.dirname(n))
console.log(OS.path.dirname(n)+'/')
抱歉,找不到 Chromium 的任何内容,但也许我只是看起来不够努力。
export const removePaths = (url: string, numsPathToRemove: number): string =>
url.replace(/+$/, "").split("/").slice(0, -numsPathToRemove).join("/");