Регулярное выражение для удаления расширения файла

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

35
задан Andreas Grech 30 November 2009 в 07:28
поделиться

6 ответов

/(.*)\.[^.]+$/

Результат будет в этой первой группе захвата. Однако, вероятно, более эффективно просто найти позицию крайнего правого периода, а затем взять все перед ним, без использования регулярного выражения.

40
ответ дан 27 November 2019 в 06:24
поделиться

Для полноты картины: как этого можно достичь без регулярных выражений?

var input = 'myfile.png';
var output = input.substr(0, input.lastIndexOf('.')) || input;

|| input учитывает случай, когда lastIndexOf () предоставляет -1 . Понимаете, это все еще однострочный.

83
ответ дан 27 November 2019 в 06:24
поделиться
/^(.+)(\.[^ .]+)?$/

Тестовые примеры, в которых это работает, а другие не работают:

  • «. Htaccess» (начальная точка)
  • «файл» (без расширения файла)
  • «отправить миссис». (без расширения, но оканчивается на abbr.)
  • «версия 1.2 проекта» (без расширения, но все еще содержит точку)

Общий тред, приведенный выше, - это, конечно, «искаженные» расширения файлов. Но вы всегда должны думать об этих угловых случаях. : P

Тестовые случаи, когда это не удается:

  • «версия 1.2» (без расширения файла, но «похоже» на его наличие)
  • «name.tar.gz» (если вы рассматриваете это как «составное extension "и хотел, чтобы он был разделен на" name "и" .tar.gz ")

Как справиться с этим проблематично, и лучше всего решать в зависимости от проекта.

11
ответ дан 27 November 2019 в 06:24
поделиться

Регулярное выражение для соответствия шаблону:

/\.[^.]*$/

Он находит символ точки ( \. ), за которым следует 0 или более символов, не являющихся точками ( [^.] * ), за которым следует конец строки ( $ ).

 console.log ("aaa.bbb.ccc" .replace (/\.[^.pting*$/, '')) 
7
ответ дан 27 November 2019 в 06:24
поделиться

В javascript вы можете вызвать метод Replace (), который будет заменять на основе регулярного выражения.

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

/^(.*)\..*$/

Как реализовать замену можно найти в этом вопросе Stackoverflow.

Вопрос о регулярном выражении Javascript

-2
ответ дан 27 November 2019 в 06:24
поделиться

This will do it as well :)

'myfile.png.jpg'.split('.').reverse().slice(1).reverse().join('.');

I'd stick to the regexp though... =P

0
ответ дан 27 November 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: