Оптимизация regex

Описание

Задача примерно такая:
Есть массив строк и регулярное выражение. Нужно выводить из строк те, которые имеют хотя бы одно совпадение с условием regex и подчеркнуть совпадения.

Решение

Наилучшее решение, что приходит голову это:

const examples = [
  `Lorem ipsum dolor sit amet, consectetur adipiscing elit.`,
  `Ut vestibulum volutpat sem, ac fermentum nunc tincidunt ut.`,
  `Nullam eu aliquam lacus.`,
  `Sed nisi elit, vehicula vel viverra eget, porttitor tristique mi.`,
  `Sed magna tellus, rutrum sed nulla sit amet, malesuada ullamcorper lectus.`,
  `Integer nisi lorem, porta a nibh at, malesuada gravida ex.`,
  `Maecenas iaculis hendrerit urna, accumsan fermentum lorem facilisis vel.`,
  `Duis porttitor nisl id nunc suscipit hendrerit.`,
  `Donec mauris enim, sodales sed ex in, ornare pellentesque urna.`,
  `Suspendisse tristique vehicula scelerisque.`,
  `Integer porttitor eros magna, vel ornare tortor consequat sed.`,
  `Curabitur venenatis id risus vel ullamcorper.`,
  `Quisque dictum consequat eros, eget tincidunt massa tristique nec.`,
  `Morbi interdum convallis felis quis feugiat.`,
  `Nunc a sagittis ligula, porttitor viverra orci.`,
  `In lacinia sem quis nisi sagittis tempus. Morbi ac dapibus ante.`,
  `Mauris sapien risus, aliquam et tellus quis, tincidunt convallis turpis.`,
  `Donec facilisis viverra gravida.`,
  `Nam ac justo eros.`,
  `Duis ac tempus ipsum.`,
  `Nunc quis ligula ipsum.`,
  `Ut feugiat lectus diam, at finibus ligula luctus eget.`,
  `Vestibulum ultrices bibendum aliquam.`,
  `Nullam rutrum interdum odio, nec iaculis leo.`,
];
const regex = /\blorem\b/im;
for (const example of examples) {
  if (regex.test(example)) {
    document.body.appendChild(document.createElement(`span`)).innerHTML = example.replace(regex, (substring) => `<mark>${substring}</mark>`);
  }
}
body {
  display: flex;
  flex-direction: column;
}

Тут мне слегка смущает та часть, что мы сначала проверяем строку с помощью RegExp.test(), потом выполняем String.replace() заменяя текст. Ну понятнее дело что в String.replace() он заново ищет эти совпадения которые уже были найдены в RegExp.test(), что мне кажется влияет на оптимизацию.

Конечно тут строк 10-15, да и RegExp.test() ищет только 1 совпадение, но все же при большом тексте и при сложной условии regex, программа будет работать медленнее, хотя бы на 0,5-1 сек.

Вопрос

Вот хочется узнать методы более оптимизированные, чем моё.


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