Как регуляркой удалить куски в тексте?

Есть строка, в которой текст:

random text 1***trash2***y6f dhy 1 month ago 14 minutes, 29 seconds 3,620 name***trash3***random text 1","random text 2***trash2***pot 5aq 3 months ago 9 minutes, 9 seconds 226,629 name***trash3***random text 2","random text 3***trash2***uan 4fp 5 months ago 26 minutes 506,950 name***trash3***random text 3"
Хочу удалить то, что выделил желтым и синим . введите сюда описание изображения

Вопрос/проблема: Я написал регулярку для удаления того что желтое: ***trash3***+([\s\S]+)"+ Но она убирает все данные с первого до последнего совпадения найденного в строке..... по-сути оставляя только начало и конец от всей строки. А нужно чтоб удаляло каждый найденный кусок.

Если не понятно, то далее я поясню подробнее:

Желтое - это что между name и кавычкой "

Как я это хочу реализовать:

В тексте, с помощью JS ищу регуляркой эти куски :

***trash3***random text 1
***trash3***random text 2
***trash3***random text 3

и заменяю на "пустоту".

то есть удаляем ***trash3*** и сразу идущий после него любой рандомный текст до замыкающей кавычки (кавычку не удаляем).

random text 1 - это какое-то рандомное предложение состоящее из нескольких слов. Обратите внимание, что этот же самый рандомный текст стоит до ***trash2*** , но его мы не удаляем.

Tак-же хочу удалить такой рандомный текст :

y6f dhy
pot 5aq
uan 4fp

Который идёт между ***trash2*** и цифрой пробел и временным названием. Типа 2 year, 27 years, 1 day, 6 days... и так далее.

А синим выделено - это то что между ***trash2*** и любое из этих значений:

{цифра} minutes
{цифра} minute
{цифра} day
{цифра} days
{цифра} weeks
{цифра} week
{цифра} hours
{цифра} hour
{цифра} years
{цифра} year
{цифра} months
{цифра} month
Но скорее всего это уже следующей регуляркой, т.к в моём случае "чистку" можно разбить "на 2 раза....2 иттерации".


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

Автор решения: vsemozhebuty

Если правильно понял, можно так:

const str = 'random text 1***trash2***y6f dhy 1 month ago 14 minutes, 29 seconds 3,620 name***trash3***random text 1","random text 2***trash2***pot 5aq 3 months ago 9 minutes, 9 seconds 226,629 name***trash3***random text 2","random text 3***trash2***uan 4fp 5 months ago 26 minutes 506,950 name***trash3***random text 3"';

const result = str
  .replace(/\*\*\*trash3\*\*\*[^"]+/g, '')
  .replace(/(?<=\*\*\*trash2\*\*\*)\w{3} \w{3}/g, '');

console.log(result);

Если нет поддержки заглядывания назад (lookbehind assertions):

const str = 'random text 1***trash2***y6f dhy 1 month ago 14 minutes, 29 seconds 3,620 name***trash3***random text 1","random text 2***trash2***pot 5aq 3 months ago 9 minutes, 9 seconds 226,629 name***trash3***random text 2","random text 3***trash2***uan 4fp 5 months ago 26 minutes 506,950 name***trash3***random text 3"';

const result = str
  .replace(/\*\*\*trash3\*\*\*[^"]+/g, '')
  .replace(/\*\*\*trash2\*\*\*\w{3} \w{3}/g, '***trash2***');

console.log(result);

→ Ссылка