删除 URL 中的最后一个目录

问题描述 投票:0回答:7

我正在尝试删除 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
.

我应该使用什么正则表达式来执行此操作?

javascript regex url path replace
7个回答
99
投票

通过使用此代码从 Url 链接中删除最后一个元素。

url.substring(0, url.lastIndexOf('/'));

52
投票

解释:用“/”进行爆炸,用pop删除最后一个元素,用“/”再次连接。

function RemoveLastDirectoryPartOf(the_url)
{
    var the_arr = the_url.split('/');
    the_arr.pop();
    return( the_arr.join('/') );
}

参见小提琴http://jsfiddle.net/GWr7U/


9
投票

另一种删除目录路径末尾的方法:

path.normalize(path.join(thePath, '..'));

6
投票

我建议使用的最简单方法是混合使用 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);

3
投票

以下是一些正确处理

/
、“”、
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
即可。也许您想要不同的行为,但您至少应该考虑这些边缘情况。


1
投票

坚持使用本机库,

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 的任何内容,但也许我只是看起来不够努力。


0
投票
export const removePaths = (url: string, numsPathToRemove: number): string =>

url.replace(/+$/, "").split("/").slice(0, -numsPathToRemove).join("/");

© www.soinside.com 2019 - 2024. All rights reserved.