Совпадение с последним словом после / - PullRequest
9 голосов
/ 16 февраля 2010

Итак, у меня есть какие-то внутренние URL-адреса: например, "/img/pic/Image1.jpg" или "/pic/Image1.jpg" или просто "Image1.jpg", и мне нужно соответствовать этому "Image1 .jpg "Другими словами, я хочу сопоставить последнюю последовательность символов после / или, если нет /, чем просто последовательность символов. Заранее спасибо!

Ответы [ 8 ]

12 голосов
/ 16 февраля 2010

.*/(.*) не будет работать, если нет /s.

([^/]*)$ должно работать, есть или нет.

11 голосов
/ 16 февраля 2010

На самом деле вам не нужно регулярное выражение для этого.

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

и он также отлично работает для строк без /, потому что тогда lastIndexOf возвращает -1.

s="hest"
s.substr(s.lastIndexOf("/")+1)
=> hest
3 голосов
/ 16 февраля 2010
.*/([^/]*)

Группа захвата соответствует последней последовательности после /.

2 голосов
/ 04 марта 2014

Простое регулярное выражение, которое я протестировал:

\w+(.)\w+$

Вот хороший сайт, на котором вы можете его протестировать: http://rubular.com/

2 голосов
/ 16 февраля 2010

Следующее выражение поможет:

/([\w\d._-]*)$

Или даже проще (но я думаю, что это также было размещено ниже до меня)

([^/]+)$
1 голос
/ 16 февраля 2010

Я заметил, что вы сказали в ваших комментариях, что вы используете 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"
1 голос
/ 16 февраля 2010

В Ruby вы бы написали

([^\/]*)$

Регулярные выражения в Ruby довольно универсальны, и вы можете проверить их вживую здесь: http://rubular.com/ Кстати: может быть, есть другое решение, которое не требует регулярных выражений? Например, File.basenam(path) (снова Рубин)

Редактировать: profjim опубликовал его ранее.

0 голосов
/ 16 февраля 2010

Что-то вроде. * / (. *) $ (Детали зависят от того, говорим ли мы о Perl или о каком-то другом диалекте регулярных выражений)

Первый. * Соответствует всему (включая косую черту). Затем есть одна косая черта, затем есть. *, Которая соответствует всему от этой косой черты до конца (то есть $).

* действует жадно слева направо, что означает, что при наличии нескольких слэшей первый. * Будет соответствовать всем, кроме последнего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...