Regex удаляет специальные символы в имени файла, кроме расширения - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужно удалить любой специальный символ из имени файла, кроме расширения.

Я использую javascript filename.replace(regex, '-');

Исходное имя файла: manuel fernandex – Index Prot.bla.otype 5 (pepito grillo).jpg

Целевое имя файла: manuel-fernandex-Index-Prot-bla-otype-5-pepito-grillo-.jpg

С этим я получаю любые специальные символы в блоке, только то, что мне нужно, но нужно пропустить расширение имени файла:

/[^\w\d]+/g Результат: manuel-fernandex-Index-Prot-bla-otype-5-pepito-grillo-jpg

С этим я удаляю любой специальный символ, кроме имени файла, но также оставляю все точки в имени файла:

[^\d\w\_\-\.]+ Результат: manuel-fernandex-Index-Prot.bla.otype-5-pepito-grillo.jpg

Imочень близко, но я не могу найти окончательное решение.

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете удалить любые символы, кроме символов слова и точки, с помощью [^\w.], а любую точку, за которой не следует 1+ без точек в конце строки:

filename = filename.replace(/(?:\.(?![^.]+$)|[^\w.])+/g, "-");

См. regex demo

Подробности

  • (?: - начало группы без захвата:
    • \.(?![^.]+$) -любая точка, за которой не следует 1+ не точечных символов в конце строки
    • | - или
    • [^\w.] - любой символ, кроме слова char и dot char
  • )+ - конец группы, повторите 1 или более раз.

Другое решение (, если расширения всегда присутствуют ): выделите расширение, запустите простое регулярное выражение для первого чанка, затем присоединитесь обратно:

var filename = "manuel fernandex – Index Prot.bla.otype 5 (pepito grillo).jpg";
var ext = filename.substr(filename.lastIndexOf('.') + 1);
var name = filename.substr(0, filename.lastIndexOf('.')); 
console.log(name.replace(/\W+/g, "-") + "." + ext);

Обратите внимание, что ваши /[^\w\d]+/g и /\W+/g равны \w включает \d.

Или, если расширения являются необязательными, разделяйте их с помощьюпоследнюю точку замените, как в предыдущем решении, и присоединитесь назад:

var filename = "manuel fernandex – Index Prot.bla.otype 5 (pepito grillo).jpg";
var parts = filename.split(/\.(?=[^.]*$)/);
parts[0] = parts[0].replace(/\W+/g, "-");
console.log(parts.join("."));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...