javascript - 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);
这将返回我想要的。但我认为这是糟糕的代码,我认为必须有某种方法可以只使用一行。还有什么其他方法可以做到这一点?
解决方案
你有很多选择。
- 正则表达式方法
lastIndexOf
方法_split
/join
方法_
就个人而言,我更喜欢#2 提供的简单性和没有不必要的中间对象。
1.正则表达式方法
...如CertainPerformance或replace
用于替换最后一个字符之后的所有字符的版本所示/
。
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.split
和join
方法
...如尼娜所示。(当我看到她的时删除了我的,这更简洁,但更难阅读。)请注意,Nina 的实现还假设会有一个斜线,你需要检查结果split
(例如,是不是更多比一个长)来处理没有一个的情况。
推荐阅读
- java - Java 编译错误 "error: class, interface, or enum expected" 在这种情况下有帮助吗?
- import - Robot Framework:有条件地导入资源
- angular - TS2304:找不到名称
- javascript - JavaScript 上下文翻译在电子中不起作用
- nginx - 我应该如何修改 logstash.conf 以获得我想要的字段?
- r - 为每个社区提取社区节点和其他节点之间的边列表
- c# - 在 WebApi 控制器中使用 SimpleInjector 的运行时空引用异常
- excel - ADODB 有时不记录数据
- ios - 警告文本字段中的大写[仅第一个单词]
- python-3.x - 使用 if_exists 时 pandas to_sql 失败