Регулярное выражение для извлечения имени файла из пути
Мне нужно извлечь только имя файла (без расширения файла) из следующего пути....
\\my-local-server\path\to\this_file may_contain-any&character.pdf
Я пробовал несколько вещей, большинство из которых основывалось на чем-то вроде http://regexr.com?302m5, но не может добраться туда
Ответы
Ответ 1
^\\(.+\\)*(.+)\.(.+)$
Это регулярное выражение было проверено на следующих двух примерах:
\ var\www\www.example.com\index.php
\ Index.php
Первый блок "(. + \) *" соответствует пути к каталогу.
Второй блок "(. +)" Соответствует имени файла без расширения.
Третий блок "(. +) $" Соответствует расширению.
Ответ 2
Это получит имя файла, но также получит точку. Возможно, вы захотите урезать последнюю цифру из этого кода.
[\w-]+\.
Обновить
@Geoman, если в имени файла есть пробелы, используйте приведенный ниже шаблон
[ \w-]+\. (space added in brackets)
демонстрация
Ответ 3
Это всего лишь небольшое изменение в @hmd, поэтому вам не нужно обрезать .
[ \w-]+?(?=\.)
Demo
Действительно, спасибо идет в @hmd. Я только немного улучшил это.
Ответ 4
Попробуйте this:
[^\\]+(?=\.pdf$)
Он соответствует всем, кроме обратного слэша, а затем .pdf
в конце строки.
Вы также можете (и, может быть, даже лучше) принять участие в группе захвата:
([^\\]+)\.pdf$
Но как вы относитесь к этой группе (часть в скобках) зависит от используемого вами языка или регулярного выражения. В большинстве случаев это будет выглядеть как $1
или \1
, или библиотека предоставит некоторый метод для получения группы захвата по ее номеру после соответствия регулярного выражения.
Ответ 5
Если кто-то ищет абсолютный путь (и относительный путь) в JavaScript, регулярное выражение javascript в javascript для файлов:
var path = "c:\\my-long\\path_directory\\file.html";
((/(\w?\:?\\?[\w\-_\\]*\\+)([\w-_]+)(\.[\w-_]+)/gi).exec(path);
Выход:
[
"c:\my-long\path_directory\file.html",
"c:\my-long\path_directory\",
"file",
".html"
]
Ответ 6
Здесь небольшая модификация замечательного ответа Angelo, которая позволяет пробелы в пути, имени файла и расширении, а также отсутствующие части:
function parsePath (path) {
var parts = (/(\w?\:?\\?[\w\-_ \\]*\\+)?([\w-_ ]+)?(\.[\w-_ ]+)?/gi).exec(path);
return {
path: parts[0] || "",
folder: parts[1] || "",
name: parts[2] || "",
extension: parts[3] || "",
};
}
Ответ 7
Вот альтернатива, которая работает на windows/unix:
"^(([A-Z]:)?[\.]?[\\{1,2}/]?.*[\\{1,2}/])*(.+)\.(.+)"
Первый блок: путь
Второй блок: манекен
Третий блок: имя файла
Четвертый блок: расширение
Протестировано:
".\var\www\www.example.com\index.php"
"\var\www\www.example.com\index.php"
"/var/www/www.example.com/index.php"
"./var/www/www.example.com/index.php"
"C:/var/www/www.example.com/index.php"
"D:/var/www/www.example.com/index.php"
"D:\\var\\www\\www.example.com\\index.php"
"\index.php"
"./index.php"
Ответ 8
Нажмите кнопку Explain на этих ссылках, показанных TEST, чтобы увидеть, как они работают.
Это относится к расширению pdf
.
TEST ^.+\\([^.]+)\.pdf$
Это относится к любому расширению, а не только к pdf
.
TEST ^.+\\([^.]+)\.[^\.]+$
([^.]+)
Это группа захвата $1
для извлечения имени файла без расширения.
\\my-local-server\path\to\this_file may_contain-any&character.pdf
вернется
this_file may_contain-any&character
Ответ 9
Это регулярное выражение извлекает расширение файла, если группа 3 не равна null, это расширение.
.*\\(.*\.(.+)|.*$)
Ответ 10
также еще один для файла в dir и root
^(.*\\)?(.*)(\..*)$
для файла в каталоге
Full match 0-17 '\path\to\file.ext'
Group 1. 0-9 '\path\to\'
Group 2. 9-13 'file'
Group 3. 13-17 '.ext'
для файла в корне
Full match 0-8 'file.ext'
Group 2. 0-4 'file'
Group 3. 4-8 '.ext'
Ответ 11
Для большинства случаев (например, win, unx path, разделитель, пустое имя файла, точка, расширение файла) достаточно следующего:
// grap the dir part (1), the dir sep(2) , the bare file name (3)
path.replaceAll("""^(.*)[\\|\/](.*)([.]{1}.*)""","$3")
Ответ 12
Я использую это регулярное выражение для замены имени файла файла на index
. Он соответствует непрерывной строке символов, которая не содержит косой черты и сопровождается .
и строкой символов слова. Он извлечет имя файла, включая пробелы и точки, но проигнорирует полное расширение файла.
const regex = /[^\\/]+?(?=\.\w+$)/
console.log('/path/to/file.png'.match(regex))
console.log('/path/to/video.webm'.match(regex))
console.log('/path/to/weird.file.gif'.match(regex))
console.log('/path with/spaces/and file.with.spaces'.match(regex))