Большинство программистов, которые используют шаблонное метапрограммирование, использует его косвенно через библиотеки как повышение. Они даже, вероятно, не знают то, что происходит негласно, только что это делает синтаксис из определенных операций намного намного легче.
/(.*)\.[^.]+$/
Результат будет в этой первой группе захвата. Однако, вероятно, более эффективно просто найти позицию крайнего правого периода, а затем взять все перед ним, без использования регулярного выражения.
Для полноты картины: как этого можно достичь без регулярных выражений?
var input = 'myfile.png';
var output = input.substr(0, input.lastIndexOf('.')) || input;
|| input
учитывает случай, когда lastIndexOf ()
предоставляет -1
. Понимаете, это все еще однострочный.
/^(.+)(\.[^ .]+)?$/
Тестовые примеры, в которых это работает, а другие не работают:
Общий тред, приведенный выше, - это, конечно, «искаженные» расширения файлов. Но вы всегда должны думать об этих угловых случаях. : P
Тестовые случаи, когда это не удается:
Как справиться с этим проблематично, и лучше всего решать в зависимости от проекта.
Регулярное выражение для соответствия шаблону:
/\.[^.]*$/
Он находит символ точки ( \. ), за которым следует 0 или более символов, не являющихся точками ( [^.] * ), за которым следует конец строки ( $ ).
console.log ("aaa.bbb.ccc" .replace (/\.[^.pting*$/, ''))
В javascript вы можете вызвать метод Replace (), который будет заменять на основе регулярного выражения.
Это регулярное выражение будет соответствовать всему, от начала строки до конца, и удалит все, что находится после последней точки, включая точку.
/^(.*)\..*$/
Как реализовать замену можно найти в этом вопросе Stackoverflow.
This will do it as well :)
'myfile.png.jpg'.split('.').reverse().slice(1).reverse().join('.');
I'd stick to the regexp though... =P