Оптимизация 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 сек.
Вопрос
Вот хочется узнать методы более оптимизированные, чем моё.