Шаблонизатор с циклами и условиями
Условие
render(template, data): поддержи {{ключ}}, {{#if ключ}}…{{/if}} и {{#each список}}…{{/each}} с доступом к элементу через {{.}} . Вложенность не требуется.
Что проверяют тесты
подстановка
условие истинно
условие ложно
цикл по примитивам
цикл по объектам
пустой список
неизвестный ключ даёт пусто
ноль подставляется
Как подойти
Порядок обработки - суть задачи: сначала циклы (у них своя область видимости), потом условия, потом простые подстановки. Ленивый квантификатор [\s\S]*? не даёт первому открывающему тегу склеиться с последним закрывающим. Регулярки хватает только на плоские шаблоны - для вложенности нужен разбор в дерево, и это честный ответ на follow-up.
Подсказки: 4
- Обрабатывай блоки до простых подстановок, иначе содержимое блока подставится раньше времени.
- Ленивый квантификатор в регулярке блока обязателен, иначе два блока схлопнутся в один.
- Проверку ключа делай через in - иначе ноль и пустая строка исчезнут.
- \w в регулярке не покрывает кириллицу - ключи на русском не найдутся.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.