匹配斜杠后的最后一个单词

9

所以,我有一些类似实习链接的URL:例如 "/img/pic/Image1.jpg" 或 "/pic/Image1.jpg" 或仅为 "Image1.jpg",我需要匹配此 "Image1.jpg",换句话说,如果在 / 后没有字符序列,则要匹配最后一个字符序列。提前谢谢!


正则表达式是通用的,但它适用于JavaScript正则表达式。 - Le_Coeur
3
正则表达式并不是通用的,有几种不同功能的风格。但是这个Perl正则表达式可以完成你的任务:^(?:.*/)*(.*)$ - Igor Korkhov
1
你不需要正则表达式来完成这个任务。使用你最喜欢的编程语言,按照 "/" 分割字符串并获取最后一个元素。比编写正则表达式要简单得多。 - ghostdog74
8个回答

13

.*/(.*) 如果没有 /s 就不会生效。

([^/]*)$ 无论有没有 /,都应该可以生效。


11

实际上,您不需要使用正则表达式来实现此功能。

s="this/is/a/test"
s.substr(s.lastIndexOf("/")+1)
=> test

如果字符串中没有/,那么lastIndexOf会返回-1。因此,这也适用于没有/的字符串。

s="hest"
s.substr(s.lastIndexOf("/")+1)
=> hest

3
.*/([^/]*)

捕获组匹配斜杠后的最后一个序列。

你也可以使用 (.*)/(?!/),这样正则表达式就不会消耗最后一个字符:https://regex101.com/r/YCatho/1 - user

2
以下表达式可以解决问题:
/([\w\d._-]*)$

甚至更简单的方法(但我认为在我之前已经发布过了)
([^/]+)$

2

我测试过的一个简单正则表达式:

\w+(.)\w+$

这里有一个很好的网站可以进行测试:http://rubular.com/


1

我注意到你在评论中说你正在使用JavaScript。实际上,你不需要使用正则表达式来完成这个任务,而且我认为拥有一个不使用正则表达式的替代方案总是很好的。

var str = "/pic/Image1.jpg";
str.split("/").pop();

// example: 
alert("/pic/Image1.jpg".split("/").pop());     // alerts "Image1.jpg"
alert("Image2.jpg".split("/").pop());          // alerts "Image2.jpg"

“split” 会创建比所需更多的字符串实例和数组。在某些情况下,这可能是关键性的。 - deamon

1
在 Ruby 中,您会编写如下代码:
([^\/]*)$

Ruby中的正则表达式非常通用,您可以在此处实时测试它们:http://rubular.com/ 顺便说一句:也许有其他不涉及正则表达式的解决方案?例如File.basenam(path)(同样是Ruby)

编辑:profjim已经先发布了这个内容。


0

类似于 .*/(.*)$(具体取决于我们是否在谈论 Perl 或其他正则表达式方言)

首先 .* 匹配所有内容(包括斜杠)。然后是一个斜杠,接着是 .*,它匹配从该斜杠到结尾的所有内容(即 $)。

* 从左到右贪婪地操作,这意味着当您有多个斜杠时,第一个 .* 将匹配除最后一个斜杠以外的所有内容。


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