我正在使用PEG.js创建一个包含解析字符串的解析器。
包含任何类型字符的字符串都用引号括起来"
,并且可能包含转义引号\"
。
到目前为止,我有以下规则:
start
= ["] string:(( '\\"' {return '"';} / [^"])*) ["]
{return string.join('');}
它适用于PEG.js 在线版本并"abc\"def"
为给定的输入生成"abc\"def"
。
为带有 PEG.js 版本 0.7.0 的 Node.js 版本 0.6.21 生成的解析器按以下方式执行
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
这个问题有解释或解决方法吗?特别是,我不可能对解析器的预期输入中的所有引号进行双重转义。