Как по мне, то быстрее сделать `.split('\n')`, потом можно проделать такое
var line;
var outArr=[[]]
while(line = inArr.shift()){
if(line[1]=='%')
outArr.unshift([line]);
else
outArr[0].push(line);
}
outLine.reverse();
и уже каждый блок пробегать регулярками.
Если нужно будет как-то развивать формат, то можно воспользоваться такими инструментами как этот
https://github.com/Svoloch/js-text-tools