MKr*_*ert 3 javascript peg parser-generator node.js
我正在使用PEG.js创建一个包含解析字符串的解析器。
包含任何类型字符的字符串都用引号括起来",并且可能包含转义引号\"。
到目前为止,我有以下规则:
start
= ["] string:(( '\\"' {return '"';} / [^"])*) ["]
{return string.join('');}
Run Code Online (Sandbox Code Playgroud)
它在PEG.js 在线版本中工作,并"abc\"def"针对给定的输入进行生成"abc\"def"。
为 Node.js 版本 0.6.21 和 PEG.js 版本 0.7.0 生成的解析器按以下方式执行
var result = parser.parse('"abc\"def"');
Run Code Online (Sandbox Code Playgroud)
并产生以下错误:
{ name: 'SyntaxError',
expected: [],
found: 'd',
message: 'Expected end of input but "d" found.',
offset: 5,
line: 1,
column: 6 }
Run Code Online (Sandbox Code Playgroud)
但是,使用\\"代替会\"成功并获得预期的输出。
var result = parser.parse('"abc\\"def"'); // parses correctly
Run Code Online (Sandbox Code Playgroud)
这个问题有解释或解决方法吗?特别是,我不可能对解析器的预期输入中的所有引号进行双重转义。
该语句中的字符串文字...
var result = parser.parse('"abc\"def"');
...实际上不包含反斜杠。在 JavaScript 中,这一符号序列 - \"- 被解析为单个符号 - "- 无论使用什么引号来分隔字符串 - 双引号或单引号。JS 不会在字符串中插入变量和表达式,它们之间基本上没有区别。
'"abc\\"def"'然而,这个字符串有一个反斜杠:它是按该\\序列编码的。请注意,不必使用另一个反斜杠来转义双引号本身(因为分隔符是单引号)。"\"abc\\\"def\""但如果使用表格,你就必须这样做。
| 归档时间: |
|
| 查看次数: |
825 次 |
| 最近记录: |