首页 > 解决方案 > Javascript删除字符串中目录的结尾

问题描述

我一直在研究,split(), slice(), substring()但我不确定他们能做我想要的。

基本上我想删除字符串的最后一个子目录,例如:

Computers/Hard-drive/5GB/Brand

我需要能够删除类似的Brand东西Computers/Hard-drive/5GB

我的解决方案是

var val = directory.split("/");
var result;
val.forEach(function (dir) {
     result = result+"/"+dir;
});
console.log(result);

这将返回我想要的。但我认为这是糟糕的代码,我认为必须有某种方法可以只使用一行。还有什么其他方法可以做到这一点?

标签: javascript

解决方案


你有很多选择。

  1. 正则表达式方法
  2. lastIndexOf方法_
  3. split/join方法_

就个人而言,我更喜欢#2 提供的简单性和没有不必要的中间对象。

1.正则表达式方法

...如CertainPerformancereplace用于替换最后一个字符之后的所有字符的版本所示/

let str = "Computers/Hard-drive/5GB/Brand";
str = str.replace(/\/[^\/]+$/, "");
console.log(str);

如果没有任何斜线,这很好用;它只是返回未更改的字符串。

2.lastIndexOf版本

let str = "Computers/Hard-drive/5GB/Brand";
const index = str.lastIndexOf("/");
str = str.substring(0, index);
console.log(str);

请注意,上面假设会有一个斜线。为了不做出这样的假设,您需要添加一个警卫以防万一index-1

let str = "Computers/Hard-drive/5GB/Brand";
let index = str.lastIndexOf("/");
if (index !== -1) {
    str = str.substring(0, index);
}
console.log(str);

str = "Computers";
index = str.lastIndexOf("/");
if (index !== -1) {
    str = str.substring(0, index);
}
console.log(str);

3.splitjoin方法

...如尼娜所示(当我看到她的时删除了我的,这更简洁,但更难阅读。)请注意,Nina 的实现还假设会有一个斜线,你需要检查结果split(例如,是不是更多比一个长)来处理没有一个的情况。


推荐阅读