Например, предполагая, что x = filename.jpg
я хочу получить filename
, где filename
может быть любое имя файла (предположим, что имя файла содержит только [a-zA-Z0-9-_] для упрощения.).
Я видел x.substring(0, x.indexOf('.jpg'))
на DZone Snippets , но не будет ли x.substring(0, x.length-4)
лучше? Потому length
что это свойство и не выполняет проверку символов, тогда как indexOf()
является функцией и проверкой символов.
Ответы:
Если вы знаете длину расширения, вы можете использовать его
x.slice(0, -4)
(где 4 - это три символа расширения и точка).Если вы не знаете длину, регулярное выражение @John Hartsock будет правильным подходом.
Если вы не хотите использовать регулярные выражения, вы можете попробовать это (менее производительно):
Обратите внимание, что это не удастся для файлов без расширения.
источник
.jpg
. Я искал что-то вроде Ruby'sx[0..-5]
иx.slice(0, -4)
отлично выглядит! Спасибо! И спасибо всем остальным за все другие надежные альтернативы!"picture.jpeg".slice(0, -4)
-> «картинка».Не уверен, что будет работать быстрее, но это будет более надежно, когда речь идет о расширении, как
.jpeg
или.html
источник
В файле node.js имя файла без расширения можно получить следующим образом.
Дальнейшее объяснение на странице документации Node.js.
источник
var parsed = path.parse(filename)
после чегоpath.join(parsed.dir, parsed.name)
.let base = path.basename( file_path, path.extname( file_path ) )
.x.length-4
учитывает только расширения 3 символов. Что делать, если у вас естьfilename.jpeg
илиfilename.pl
?РЕДАКТИРОВАТЬ:
Чтобы ответить ... конечно, если у вас всегда есть расширение
.jpg
,x.length-4
будет работать просто отлично.Однако, если вы не знаете длину своего расширения, любое из ряда решений будет лучше / надежнее.
x = x.replace(/\..+$/, '');
ИЛИ
x = x.substring(0, x.lastIndexOf('.'));
ИЛИ
x = x.replace(/(.*)\.(.*?)$/, "$1");
ИЛИ (при условии, что имя файла имеет только одну точку)
ИЛИ (также только с одной точкой)
источник
var parts = full_file.split("."); var ext = parts[parts.length-1]; var file = parts.splice(0,parts.length-1).join(".");
x = x.substr(0, x.lastIndexOf('.'));
- ты наверное имел ввидуx = x.substring(0, x.lastIndexOf('.'));
?Возможно, вы можете использовать предположение, что последняя точка будет разделителем расширения.
Если файл не имеет расширения, он вернет пустую строку. Чтобы исправить это используйте эту функцию
источник
var f = x.substr(0, x.lastIndexOf('.')) || x;
Это работает, потому что пустая строка ложная, поэтому она возвращает x.Мне нравится этот, потому что это один лайнер, который не слишком трудно читать:
источник
В версиях Node.js до 0.12.x:
path.basename(filename, path.extname(filename))
Конечно, это также работает в 0.12.x и позже.
источник
path.parse
Ответ проще.Это работает, даже если в строке нет разделителя.
Может также использоваться как однострочный:
РЕДАКТИРОВАТЬ: Это более эффективное решение:
источник
Я не знаю, если это правильный вариант, но я использую это:
Это не просто одна операция, которую я знаю, но, по крайней мере, она всегда должна работать!
ОБНОВЛЕНИЕ: Если вы хотите oneliner, вот вы:
(name.split('.').slice(0, -1)).join('.')
источник
hello.name.txt
возвращаетесьhello, name
Еще один вкладыш:
источник
Вот еще одно решение на основе регулярных выражений:
Это должно только отрубить последний сегмент.
источник
Простой:
источник
Принятый ответ удаляет только последнюю часть расширения (
.jpeg
), что может быть хорошим выбором в большинстве случаев.Однажды мне пришлось удалить все расширения (
.tar.gz
), а имена файлов были ограничены, чтобы не содержать точек (так2015-01-01.backup.tar
что это не будет проблемой):источник
источник
path/name.ext
->paht/name
вместо простого возвратаname
, но я бы предпочел сделать с этим,fs.parse
хотя он немного более многословен: stackoverflow.com/a/59576950/895245Если вам нужно обработать переменную, которая содержит полный путь (например,
thePath = "http://stackoverflow.com/directory/subdirectory/filename.jpg"
), и вы хотите вернуть только «имя файла», вы можете использовать:результатом будет имя == "имя файла" ;
Чтобы попробовать это, напишите следующую команду в окне консоли вашего отладчика Chrome:
window.location.pathname.split("/").slice(-1).join().split(".").shift()
Если вам нужно обработать только имя файла и его расширение (например:)
theNameWithExt = "filename.jpg"
:результат будет theName == "filename" , такой же, как указано выше;
Ноты:
Но я не могу ничего сказать ни о сравнении производительности с другими ответами, ни о совместимости браузера или ОС.
рабочий фрагмент 1: полный путь
рабочий фрагмент 2: имя файла с расширением
рабочий фрагмент 2: имя файла с двойным расширением
источник
Хотя уже довольно поздно, я добавлю другой подход, чтобы получить имя файла без расширения, используя старый добрый JS-
path.replace(path.substr(path.lastIndexOf('.')), '')
источник
path.split('.').pop()
для одной части расширения файлаNode.js удаляет расширение из каталога полного пути
https://stackoverflow.com/a/31615711/895245 например сделал
path/hello.html
->hello
, но если вы хотитеpath/hello.html
->path/hello
, вы можете использовать это:также выводит каталог:
https://stackoverflow.com/a/36099196/895245 также достигает этого, но я считаю этот подход немного более семантически приятным.
Протестировано в Node.js v10.15.2.
источник
Здесь регулярные выражения пригодятся!
.replace()
Метод Javascript будет принимать регулярное выражение, и вы можете использовать его для достижения желаемого:источник
Еще один лайнер - мы предполагаем, что наш файл - это изображение jpg >> ex: var yourStr = 'test.jpg';
источник
Ты можешь использовать
path
для маневра.Вывод
источник
источник
Это код, который я использую для удаления расширения из имени файла без использования регулярных выражений или indexOf (indexOf не поддерживается в IE8). Предполагается, что расширением является любой текст после последнего '.' персонаж.
Это работает для:
Вот код:
источник
hello.tar.gz
, выход естьhellotar
.Я бы использовал что-то вроде x.substring (0, x.lastIndexOf ('.')). Если вы стремитесь к производительности, вообще не используйте javascript :-p Нет, еще одно утверждение действительно не имеет значения для 99,9999% всех целей.
источник