Точка [.]
не применяется ко всем символам внутри [класса символов].Рассмотрим это вместо этого:
/(<%.+?%>)/
Его можно прочитать как «соответствует <%, затем как можно меньше всего, за которым следует%>».Этот ленивый не будет есть код между <% ...%> и следующим <% ...%>.