猿问

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);

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


偶然的你
浏览 166回答 3
3回答

Smart猫小萌

你有很多选择。正则表达式方法该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(例如,它是否更比一个长)来处理没有一个的情况。

缥缈止盈

一种选择是使用正则表达式:匹配字符直到先行匹配/,然后是非/字符,然后是字符串的结尾:const str = 'Computers/Hard-drive/5GB/Brand';const result = str.match(/.*(?=\/[^/]+$)/)[0];console.log(result);

慕神8447489

你可以试试String.prototype.lastIndexOf()和String.prototype.substring()var directory = 'Computers/Hard-drive/5GB/Brand'var pos = directory.lastIndexOf("/");var result = directory.substring(0, pos);console.log(result);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答