Use predicados de búsqueda hacia delante negativo:
phrase
=(!"START" .)* "START" result:(!"END" .)* "END" .* {
for (var i=0;i<result.length;++i)
// remove empty element added by predicate matching
{result[i]=result[i][1];
}
return result.join("");
}
Es necesario utilizar un predicado negativo para FIN, así como START debido a la repetición en pegjs es codicioso.
Alternativamente, la acción podría ser escrito como
{return result.join("").split(',').join("");}
Aunque esto se basa en el comportamiento no-necesariamente documentado de join
cuando se trata de matrices anidadas (es decir, que se une a las sub-series con comas y luego concatena ellos).
[ACTUALIZACIÓN] Un camino más corto para hacer frente a los elementos vacíos es
phrase
=(!"START" .)* "START" result:(t:(!"END" .){return t[1];})* "END" .* {
return result.join("");
}
Gracias! !!!!!!!!! –