使用否定先読み述語:
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("");
}
あなたはpegjsで繰り返しが貪欲であるため、ENDだけでなく、START用負の述語を使用する必要があります。ネストされた配列を扱う場合、これはjoin
のない、必ずしも文書化挙動に依存しているが、代替的に、アクションは
{return result.join("").split(',').join("");}
のように書くことができる
は(それがコンマでサブアレイに参加した後、連結、すなわちことそれら)。
[UPDATE]空要素に対処するための短い方法は
phrase
=(!"START" .)* "START" result:(t:(!"END" .){return t[1];})* "END" .* {
return result.join("");
}
感謝です! !!!!!!!!! –