我一直在调查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);这是我想要的。但我认为这是错误的代码,我认为一定有某种方法来做到这一点,只使用一行。其他的方法是什么呢?
发布于 2019-10-13 10:35:49
你有很多选择。
lastIndexOf approachsplit/join方法G 210
就我个人而言,我更喜欢#2提供的简单和缺乏不必要的中间对象。
1.正则表达式方法
...either as shown by 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方法
.as shown by Nina(当我看到她的书时,我把它拿走了,它简洁得多,而且读起来并不难。)注意,Nina的实现还假定会有一个斜杠,您需要检查split的结果(例如,是否有多个长)来处理没有的情况。
发布于 2019-10-13 10:31:12
一个选项是使用正则表达式:匹配字符,直到/匹配为止,然后是非/字符,然后是字符串的末尾:
const str = 'Computers/Hard-drive/5GB/Brand';
const result = str.match(/.*(?=\/[^/]+$)/)[0];
console.log(result);
发布于 2019-10-13 10:36:01
您可以尝试使用和
var directory = 'Computers/Hard-drive/5GB/Brand'
var pos = directory.lastIndexOf("/");
var result = directory.substring(0, pos);
console.log(result);
https://stackoverflow.com/questions/58362697
复制相似问题