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

Шаблонизатор с циклами и условиями

Условие

render(template, data): поддержи {{ключ}}, {{#if ключ}}…{{/if}} и {{#each список}}…{{/each}} с доступом к элементу через {{.}} . Вложенность не требуется.

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

  • подстановка

  • условие истинно

  • условие ложно

  • цикл по примитивам

  • цикл по объектам

  • пустой список

  • неизвестный ключ даёт пусто

  • ноль подставляется

Как подойти

Порядок обработки - суть задачи: сначала циклы (у них своя область видимости), потом условия, потом простые подстановки. Ленивый квантификатор [\s\S]*? не даёт первому открывающему тегу склеиться с последним закрывающим. Регулярки хватает только на плоские шаблоны - для вложенности нужен разбор в дерево, и это честный ответ на follow-up.

Подсказки: 4
  1. Обрабатывай блоки до простых подстановок, иначе содержимое блока подставится раньше времени.
  2. Ленивый квантификатор в регулярке блока обязателен, иначе два блока схлопнутся в один.
  3. Проверку ключа делай через in - иначе ноль и пустая строка исчезнут.
  4. \w в регулярке не покрывает кириллицу - ключи на русском не найдутся.

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

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