Навскидку - обходить строку регуляркой с флагом g, которая вылавливает эти фигурные вставки. Цвета могут быть вложенными - потому надо держать стек цветов, при открывашке добавлять, при закрывашке убирать цвет. Остальное неясно из условия: что надо с этим всем делать.
Для простой замены можно так
const result = '{red}hello world{endRed}'.replace(/\{(?:end[A-Z][a-zA-Z]*|([a-z]+))\}/g,
(m, c) => c ? `<span style="color:${c}">` : `</span>`);
здесь предполагается, что цвета указаны словами. Если есть ещё какие форматы задания цветов, например #hhhhhh, то опиши, как будет выглядеть