2012-09-01 13 views

Respuesta

10

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(""); 
    } 
+0

Gracias! !!!!!!!!! –

Cuestiones relacionadas