Подтвердить что ты не робот

Regex для соответствия имени файла в конце URL-адреса

Имея этот текст:

http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg

И другие подобные тексты, где последний 1 может быть любым другим числом, а последний 44 может быть любым другим числом, мне нужно регулярное выражение, которое будет соответствовать /1t44.jpg.

Все, что я до сих пор пробовал (/.+?\.([^\.]+)$) соответствует первой косой черте (//img.oo.com.au/prod/CRWWBGFWG/1t44.jpg).

Я использую JavaScript, поэтому все, что работает на RegexPal, должно сработать.

4b9b3361

Ответ 1

Если вы хотите сопоставить имя файла с очень конкретным расширением файла, вы можете использовать что-то вроде этого:

/\/\dt\d\d\.jpg$/

Это соответствует:

  • косая черта
  • сопровождаемый цифрой
  • сопровождаемый буквой 't'
  • с двумя цифрами
  • за которым следует ".jpg" в конце строки

Или, если вы действительно хотите указать имя файла (что будет после последней косой черты с любым расширением файла), вы можете использовать это:

/\/[^\/]+$/

Это соответствует:

  • косая черта
  • сопровождаемый одним или несколькими не косыми чертами
  • в конце строки

В вашем примере строки http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg оба они будут соответствовать /1t44.jpg. Первый, очевидно, гораздо более строгий, так как требует определенного формата имени файла. Второй соответствует любому имени файла.


Другие варианты. В разработке node.js вы можете использовать модуль path и использовать path.parse(), чтобы разбить путь на все его различные компоненты.

И есть различные библиотеки, написанные для браузера, которые также разбивают путь на его компоненты.

Ответ 2

Здесь простое Regex, которое будет соответствовать всем после последнего /:

/[^/]*$

Ответ 3

Как говорит Джонсивеб, обычный экспресс здесь действительно не нужен. AFAIK самый быстрый способ сделать это с помощью lastIndexOf и substr.

str.substr(str.lastIndexOf('/'));

Ответ 4

Конечно, вам не нужно использовать регулярное выражение до split строки и pop последняя часть:

var str="http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg";
var parts = str.split("/");
document.write(parts.pop() + "<br />");

Ответ 5

Это для Java на машине с Linux. Он захватывает последнюю часть пути к файлу, чтобы его можно было использовать для блокировки файла.

// String to be scanned to find the pattern.
String pattern = ".*?([^/.]+)*$";

// Create a Pattern object
Pattern r = Pattern.compile(pattern);

// Now create matcher object.
Matcher match = r.matcher("/usr/local/java/bin/keystore");

/**
* Now you have two matches
* #0    /usr/local/java/bin/keystore
* #1    keystore
*/

String fileLock = "";

if (match.find()) {
    fileLock = match.group(1) + ".lock";
}

Я немного отличается от первоначального вопроса. Но я надеюсь, что это поможет другим, кто застрял с той же проблемой, что и я.

Ответ 6

Основываясь на ответе Скотта, попробуйте следующее: (JavaScript)

var url = "http://img.oo.com.au/prod/CRWWBGFWG/1t44.jpg";

var path           = url.replace(/(.*)([\\\/][^\\\/]*$)/, "$1" );

var lastElement    = url.replace(/(.*)([\\\/][^\\\/]*$)/, "$2" );

Это также можно сопоставить для пути к файлу Windows/Nix, чтобы извлечь имя файла или путь к файлу:

c:\Program Files\test.js => c:\Program Files

c:\Program Files\test.js => \test.js