Код Senior Реализация с нуля обновлено

Подсветка совпадений

Условие

highlight(text, query): вернуть массив кусков вида { text, match }. Совпадения без учёта регистра, все вхождения, регулярные символы в запросе экранируются. Пустой запрос даёт один кусок без подсветки.

Что проверяют тесты

  • одно совпадение

  • без учёта регистра, регистр сохраняется

  • несколько вхождений

  • пустой запрос

  • спецсимволы не ломают

  • нет совпадений

  • совпадение в начале

Как подойти

Два принципиальных решения. Первое: экранирование пользовательского ввода - без него запрос «(» обрушит регулярку, а «.*» подсветит всё. Второе: возвращать структуру, а не строку с тегами - склейка HTML в этом месте прямой путь к XSS, а куски данными безопасны в любом фреймворке. Совпадение нулевой длины зациклит exec, если не двигать lastIndex вручную.

Подсказки: 3
  1. Экранируй запрос: пользователь введёт скобку или звёздочку.
  2. Возвращай куски данными, а не готовую разметку - так вызывающий сам решит, чем обернуть.
  3. exec с глобальным флагом идёт по lastIndex - следи за совпадением нулевой длины.

Решите в тренажёре

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