所以,我有一些类似实习链接的URL:例如 "/img/pic/Image1.jpg" 或 "/pic/Image1.jpg" 或仅为 "Image1.jpg",我需要匹配此 "Image1.jpg",换句话说,如果在 / 后没有字符序列,则要匹配最后一个字符序列。提前谢谢!
所以,我有一些类似实习链接的URL:例如 "/img/pic/Image1.jpg" 或 "/pic/Image1.jpg" 或仅为 "Image1.jpg",我需要匹配此 "Image1.jpg",换句话说,如果在 / 后没有字符序列,则要匹配最后一个字符序列。提前谢谢!
.*/(.*)
如果没有 /s 就不会生效。
([^/]*)$
无论有没有 /,都应该可以生效。
实际上,您不需要使用正则表达式来实现此功能。
s="this/is/a/test"
s.substr(s.lastIndexOf("/")+1)
=> test
如果字符串中没有/
,那么lastIndexOf
会返回-1。因此,这也适用于没有/
的字符串。
s="hest"
s.substr(s.lastIndexOf("/")+1)
=> hest
.*/([^/]*)
(.*)/(?!/)
,这样正则表达式就不会消耗最后一个字符:https://regex101.com/r/YCatho/1 - user/([\w\d._-]*)$
([^/]+)$
我注意到你在评论中说你正在使用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"
([^\/]*)$
Ruby中的正则表达式非常通用,您可以在此处实时测试它们:http://rubular.com/
顺便说一句:也许有其他不涉及正则表达式的解决方案?例如File.basenam(path)
(同样是Ruby)
编辑:profjim已经先发布了这个内容。
类似于 .*/(.*)$(具体取决于我们是否在谈论 Perl 或其他正则表达式方言)
首先 .* 匹配所有内容(包括斜杠)。然后是一个斜杠,接着是 .*,它匹配从该斜杠到结尾的所有内容(即 $)。
* 从左到右贪婪地操作,这意味着当您有多个斜杠时,第一个 .* 将匹配除最后一个斜杠以外的所有内容。
^(?:.*/)*(.*)$
。 - Igor Korkhov