我有以下 JSON 字符串,使用 PHP 5.2 json_encode() 编码:
{"foo":"\\."}
此 JSON 字符串有效。您可以在http://www.jsonlint.com/查看
但原生 JSON.parse() 方法(Chrome、Firefox)在解析时会抛出以下错误:
SyntaxError: Unexpected token ILLEGAL
有人知道为什么我不能解析转义的正则表达式元字符吗?
这个例子有效:
{"foo":"\\bar"}
但是这个也失败了:
{"foo":"\\?"}
顺便说一句:\.
只是一个简单的测试正则表达式,我想通过 javascript 的 RegExp 对象运行它。
感谢您的支持,
戴沃
最佳答案
它“不起作用”是因为您遗漏了一个关键点:当您在 Chrome 控制台中键入以下行时,两个 字符串解析正在进行:
JSON.parse('{"foo": "\\."}');
第一次 字符串解析发生在 JavaScript 解释器解析您传递给“parse()”方法的字符串常量时。 second 字符串解析发生在 JSON 解析器内部。在第一遍之后,双反斜杠只是一个反斜杠。
这个:
{"foo":"\\bar"}
之所以有效,是因为“\b”是有效的字符串内转义序列。
关于javascript - 正则表达式值的 JSON.parse() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5221026/