删除最后一个反斜杠后面的所有内容。

79

var t = "\some\route\here"

我需要从这段代码中提取 "\some\route"。

谢谢。


看这里:http://stackoverflow.com/questions/6764435/jquery-split-after-last-slash - Yetispapa
2
不能使用jQuery来完成 :P - Felix Kling
3个回答

142
你需要使用lastIndexOfsubstr...
var t = "\\some\\route\\here";
t = t.substr(0, t.lastIndexOf("\\"));
alert(t);

此外,在字符串中需要将\字符加倍,因为它们用于转义特殊字符。

更新 由于这经常对其他人有用,这里是一个代码片段示例...

// the original string
var t = "\\some\\route\\here";

// remove everything after the last backslash
var afterWith = t.substr(0, t.lastIndexOf("\\") + 1);

// remove everything after & including the last backslash
var afterWithout = t.substr(0, t.lastIndexOf("\\"));

// show the results
console.log("before            : " + t);
console.log("after (with \\)    : " + afterWith);
console.log("after (without \\) : " + afterWithout);


谢谢。我怎么把一个字符串加倍?我尝试了这个 t.replace("\","\\"),但是没有起作用。 - InGeek
1
只有在直接在代码中设置字符串值时才需要这样做,就像上面的示例一样。如果您从其他地方获取它(例如URL),则不必担心 :) - Reinstate Monica Cellio
你从哪里获取字符串值的? - Reinstate Monica Cellio
1
@Martijn 我完全理解。从每个字符都有特定含义的背景中转向JavaScript,选择用双引号或单引号来包装字符串就足以让我头疼了。然后他们又加入了使用不同字符串分隔符的字符串插值!!!你无法一直取悦所有人... :D - Reinstate Monica Cellio
2
substr已被弃用,请使用substring代替。 - Voicu
显示剩余5条评论

14

正如@Archer的回答中所述,您需要在反斜杠上加倍。我建议使用正则表达式替换来获取所需的字符串:

var t = "\\some\\route\\here";
t = t.replace(/\\[^\\]+$/,"");
alert(t);

谢谢,我仍然找不到如何将反斜杠加倍。 - InGeek
你需要在字符串本身中完成这个任务。在JavaScript中,反斜杠“\”是转义字符,因此“\k”(例如)将被解析为“k”。 - ic3b3rg
在字符串中使用@符号来表示反斜杠。例如,不要使用"C:\Mypath\MyFile",而是使用@"C:\MyPath\MyFile"。请确保在开头引号之前放置@符号。在我看来,通过使用@""而不是"\",可以使代码更易于阅读。 - Tornado726

11

使用JavaScript,您可以轻松实现此操作。删除最后一个"_"出现后的所有内容。

var newResult = t.substring(0, t.lastIndexOf("_") );

伊苏鲁,这个问题不是已经被现有的答案很好地解决了吗? - KyleMit
@KyleMit 你看不见吗?他更新了之前的回答。 - isuru
为了添加更多信息,但即使是截至2013年1月22日的版本也包括t = t.substr(0, t.lastIndexOf("\\"));,这与您的答案完全相同。 - KyleMit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接