PEG.jsを使用して、文字列の解析を含むパーサーを作成しています。
任意の種類の文字を含む文字列は引用符で囲まれ"
、エスケープされた引用符を含めることができます\"
。
これまでのところ、次のルールがあります。
start
= ["] string:(( '\\"' {return '"';} / [^"])*) ["]
{return string.join('');}
PEG.jsオンラインバージョンで動作し"abc\"def"
、指定された入力に対して生成されます"abc\"def"
。
Node.jsバージョン0.6.21とPEG.jsバージョン0.7.0用に生成されたパーサーは、次のように実行されます。
var result = parser.parse('"abc\"def"');
次のエラーが発生します。
{ name: 'SyntaxError',
expected: [],
found: 'd',
message: 'Expected end of input but "d" found.',
offset: 5,
line: 1,
column: 6 }
ただし、\\"
代わりにを使用\"
すると、期待される出力で成功します。
var result = parser.parse('"abc\\"def"'); // parses correctly
この問題の説明または回避策はありますか?特に、パーサーの予想される入力のすべての引用符を二重にエスケープすることはできません。