正则表达式值的JSON.parse()问题

时间:2011-03-07 14:43:41

标签: javascript regex json firefox google-chrome

我有以下JSON字符串,用PHP 5.2 json_encode()编码:

{"foo":"\\."}

此JSON字符串有效。您可以在http://www.jsonlint.com/

查看

但原生JSON.parse()方法(Chrome,Firefox)在解析时会抛出以下错误:

SyntaxError: Unexpected token ILLEGAL

你们有没有人知道,为什么我不能解析逃脱的正则表达式元字符?

此示例有效:

{"foo":"\\bar"}

但是这个也失败了:

{"foo":"\\?"}

BTW:\.只是一个简单的测试正则表达式,我想通过javascript的RegExp对象运行。

感谢您的支持,

Dyvor

3 个答案:

答案 0 :(得分:9)

它“无法正常工作”,因为您错过了一个关键点:当您在Chrome控制台中键入以下行时,两个字符串解析正在进行:

JSON.parse('{"foo": "\\."}');

当JavaScript解释器解析您传入“parse()”方法的字符串常量时,会发生第一个字符串解析。 第二个字符串解析发生在JSON解析器本身内部。在第一次传递之后,双反斜杠只是一个反斜杠。

这一个:

{"foo":"\\bar"}

有效,因为“\ b”是一个有效的字符串内转义序列。

答案 1 :(得分:1)

它适用于我在firebug控制台中。

>>> JSON.parse('"\\\\."');
"\."

这是正确的,因为json解析器实际上接收"\\.",即一个esacped反斜杠和一个点。

来自PHP的响应是否真的发生了问题?或者只是在“手动”测试中?

答案 2 :(得分:0)

添加一组额外的\\,为什么它有效我不太确定。

JSON.parse('{"foo":"\\\\."}');