таким образом у меня есть некоторые URL интерна: например, "/img/pic/Image1.jpg" или "/pic/Image1.jpg" или просто "Image1.jpg", и я должен соответствовать этому "Image1.jpg", другими словами, я хочу соответствовать последовательности последнего знака после / или если существует не/, чем просто последовательность символов. Заранее спасибо!
. * / (. *)
не будет работать, если нет / s.
([^ /] *) $
должен работать независимо от того, есть они или нет.
.*/([^/]*)
Группа захвата соответствует последней последовательности после /.
В Ruby вы бы написали
([^\/]*)$
Регулярные выражения в Ruby довольно универсальны, и вы можете проверить их вживую здесь: http://rubular.com /
Кстати: может быть, есть другое решение, которое не использует регулярные выражения? Например, File.basenam (путь)
(снова Ruby)
Изменить: profjim опубликовал его ранее.
Следующее выражение сделало бы трюк:
/([\w\d._-]*)$
Или даже проще (но я думаю, что это также было размещено ниже до меня)
([^/]+)$
-121--3227060- Что-то вроде. */(. *) $ (подробности зависят от того, говорим ли мы о Perl или каком-то другом диалекте регулярных выражений)
Первый. * соответствует Тогда есть одна косая черта, а есть. *, которая соответствует всему от этой косой черты до конца (то есть $).
* работает жадно слева направо, что означает, что при наличии нескольких косых черт первый. * будет соответствовать всем, кроме последнего.
Я заметил, что вы сказали в своих комментариях, что используете 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"
На самом деле вам не нужен regexp для этого.
s="this/is/a/test"
s.substr(s.lastIndexOf("/")+1)
=> test
и это также отлично работает для строк без /
, потому что тогда lastIndexOf возвращает -1.
s="hest"
s.substr(s.lastIndexOf("/")+1)
=> hest
Следующее выражение поможет:
/([\w\d._-]*)$
Или даже проще (но я думаю, что это также было опубликовано ниже до меня)
([^/]+)$