Как удалить из всех строк символы. ,! ? " ': ” “, если в таких строках есть блеклист слово?

Как удалить из всех строк символы . , ! ? " ' : ” “ , если в таких строках есть блеклист слово?

Блеклист слова в переменной [[BLACK_LIST]] :

красной
печали

Список символов для удаления в переменной [[SYMBOLS]] :

. , ! ? " ' : ” “

Исходный текст (пример) в переменной [[TEXT]] :

Ах, я вспоминаю ясно, был тогда декабрь ненастный, 
И от каждой вспышки красной тень скользила на ковер.
Ждал я дня из мрачной дали, тщетно ждал, чтоб книги дали
Облегченье от печали по утраченной Линор, 
По святой, что там, в Эдеме ангелы зовут Линор,
Безыменной здесь с тех пор.

Чтоб осталось так в переменой [[TEXT]] (удалил в 2ой и в 4ой строке) :

Ах, я вспоминаю ясно, был тогда декабрь ненастный, 
И от каждой вспышки красной тень скользила на ковер
Ждал я дня из мрачной дали, тщетно ждал, чтоб книги дали
Облегченье от печали по утраченной Линор
По святой, что там, в Эдеме ангелы зовут Линор,
Безыменной здесь с тех пор.

Я писал JS-код для удаления всей строки если в ней есть блеклист слово, но код удаляет всю строку, а мне нужно удалить только символы . , ! ? " ' : ” “ из строк в которых содержаться блеклист слова (без удаления самой строки):

[[TEXT]] = [[TEXT]].filter(function(line){
  return [[BLACK_LIST]].every(function(forbiddenWord) {
    return line.toLowerCase().indexOf(forbiddenWord.toLowerCase()) === -1;
  });
});

Ответы (1 шт):

Автор решения: Laukhin Andrey

Очевидно, Вам не следует удалять строки. Меняем filter на map, и по результату проверки отдаем или исходную строку, или строку с заменой символов:

let text = `Ах, я вспоминаю ясно, был тогда декабрь ненастный, 
И от каждой вспышки красной тень, !скользила на ковер.
Ждал я дня из мрачной дали, тщетно ждал, чтоб книги дали
Облегченье от печали по утраченной Линор, 
По святой, что там, в Эдеме ангелы зовут Линор,
Безыменной здесь с тех пор.`;

let symbols = /[.,!?"':”“]/g;
let blackList = ['красной', 'печали'];

let newtext = text.split('\n').map(function(line) {
  let notFound = blackList.every(function(forbiddenWord) {
    return line.toLowerCase().indexOf(forbiddenWord.toLowerCase()) === -1;
  });

  return notFound ? line : line.replaceAll(symbols, '');
}).join('\n');

console.log(newtext);

Возможно и такое извращение. Не стоит воспринимать всерьез. Привел для разнообразия.

→ Ссылка