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, должно сработать.
Ответы
Ответ 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