获取最后一个斜杠或反斜杠符号之后的字符串片段

4

我需要从字符串中获取最后一个 \ 或者 / 后面的部分,例如这个字符串 C:\fake\path\some.jpg ,结果应该是 some.jpg

我尝试了以下方法:

var str = "C:\fake\path\some.jpg";
var newstr = str.replace(/[^\\\/]+$/, "");
alert(newstr);

http://jsfiddle.net/J4GdN/3/

但是它并不能工作,有没有正确的正则表达式?


4
您需要将代码中的字符串赋值改为var str = "C:\\fake\\path\\some.jpg"; - epascarello
3个回答

11

您不需要使用正则表达式来完成,以下代码可以实现:

var newstr = str.substring(Math.max(str.lastIndexOf("\\"), str.lastIndexOf("/")) + 1);

4
别忘了考虑斜杠/ - Travesty3
但是该解决方案需要多次字符串查找来获取索引,不是最佳解决方案。 - epascarello
@epascarello 我实际上点赞了你的解决方案,因为它更短,但我个人更喜欢在没有其他选择的情况下避免使用正则表达式。 - Jalayn
1
我运行了测试,发现子字符串更快。http://jsperf.com/testing-indexof-vs-reg-exp-for-endofline [我有这样的感觉,因为正则表达式通常很慢] - epascarello
@epascarello 很好,感谢您提供的信息并让我发现了jsperf.com,我之前不知道这个网站! - Jalayn

5

你的 str 必须使用转义符 \\ 才能正常工作。 而且,由于您使用的正则表达式匹配结尾而不是开头,因此您需要使用 match。

var str = "C:\\fake\\p\ath\some.jpg";
var newstr = str.match(/[^\\/]+$/);
alert(newstr);

JSFiddle


1
首先,让我们转义反斜杠。
var str = "C:\\fake\\path\\some.jpg";
var newstr = str.replace(/[^\\\/]+$/, "");
alert(newstr);

现在,您正在删除some.jpg而不是将其作为结果获取。

以下是几种修复此问题的选项:

1.使用正则表达式进行替换

var newstr = str.replace(/.*[\\\/]/, "");

2.使用正则表达式进行字符串分割(不适用于所有浏览器)

var tmp = str.split(/\\|\//);
var newstr = tmp[tmp.length-1];

4.如此所述,匹配

var newstr = str.match(/.*[\\\/](.*)/)[1]; 

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