Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 生成的解析器对Node.js上的转义引号抛出错误_Javascript_Node.js_Parser Generator_Peg - Fatal编程技术网

Javascript 生成的解析器对Node.js上的转义引号抛出错误

Javascript 生成的解析器对Node.js上的转义引号抛出错误,javascript,node.js,parser-generator,peg,Javascript,Node.js,Parser Generator,Peg,我正在使用创建包含解析字符串的解析器。 包含任何类型字符的字符串都用引号括起来“,并且可能包含转义引号\” 到目前为止,我有以下规则: start = ["] string:(( '\\"' {return '"';} / [^"])*) ["] {return string.join('');} 它在中工作,并为给定的输入“abc\”def”生成“abc\”def” 为Node.js版本0.6.21和PEG.js版本0.7.0生成的解析器按以下方式执行 var res

我正在使用创建包含解析字符串的解析器。
包含任何类型字符的字符串都用引号括起来
,并且可能包含转义引号
\”

到目前为止,我有以下规则:

start
    = ["] string:(( '\\"' {return '"';} / [^"])*) ["]
        {return string.join('');}
它在中工作,并为给定的输入
“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
这个问题有什么解释或解决方法吗?
特别是,我不可能对解析器预期输入中的所有引号进行双转义。

此语句中的字符串文字

var result=parser.parse('abc\'def');

…实际上不包含反斜杠。在JavaScript中,这个符号序列-
\“
-”被解析为一个符号序列-
-无论使用什么引号来分隔字符串-双引号还是单引号。JS不会在字符串中插入变量和表达式,它们之间基本上没有区别


这个字符串-
““abc\\”def”
-但是,它有一个反斜杠:它是由
\\
序列编码的。请注意,不必使用另一个反斜杠来转义双引号本身(因为分隔符是单引号)。但是,如果使用了
“\'abc\\\\'def\”
表单,则必须执行此操作。

此语句中的字符串文字

var result=parser.parse('abc\'def')

。。。实际上不包含反斜杠。在JavaScript中,此符号序列-
\“
”被解析为单个符号-
”-无论使用什么引号来分隔字符串-双引号还是单引号。JS不会在字符串中插入变量和表达式,它们之间基本上没有区别


这个字符串-
““abc\\\”def”
-但是,它有一个反斜杠:它是由
\\
序列编码的。请注意,没有必要使用另一个反斜杠来转义双引号本身(因为分隔符是单引号)。但是,如果使用了
“\\\\\”abc\\\\\\”def\
表单,则必须使用反斜杠。

谢谢,为了快速的回答。不过有一个问题。如果要解析的字符串的内容是从文件中读取的(例如,使用Node.js),是否会存在相同的问题。因为这是解析器的真正目的。上面的问题是在为解析器编写单元测试时出现的。您的意思是,如果文件本身包含
abc\“def
行?不,
\”
将被视为两个符号-现在它不是字符串文字(我承认我没有测试它,但这是唯一合理的方法)。是的,这就是我的意思。再次感谢,谢谢你的快速回答。不过有一个问题。如果要解析的字符串的内容是从文件中读取的(例如,使用Node.js),是否会存在相同的问题。因为这是解析器的真正目的。上面的问题是在为解析器编写单元测试时出现的。您的意思是,如果文件本身包含
abc\“def
行?不,
\”
将被视为两个符号-现在它不是字符串文字(我承认我没有测试它,但这是唯一合理的方法)。是的,这就是我的意思。再次感谢。