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

Bag*_*sIO 6 javascript regex firefox json google-chrome

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

{"foo":"\\."}
Run Code Online (Sandbox Code Playgroud)

此JSON字符串有效.你可以在http://www.jsonlint.com/上查看.

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

SyntaxError: Unexpected token ILLEGAL
Run Code Online (Sandbox Code Playgroud)

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

这个例子有效:

{"foo":"\\bar"}
Run Code Online (Sandbox Code Playgroud)

但是这个也失败了:

{"foo":"\\?"}
Run Code Online (Sandbox Code Playgroud)

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

感谢您的支持,

Dyvor

Poi*_*nty 9

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

JSON.parse('{"foo": "\\."}');
Run Code Online (Sandbox Code Playgroud)

第一个当JavaScript解释器解析字符串常量要传递到"解析()"方法的字符串解析发生.在第二串解析发生在JSON解析器本身内.在第一次传递之后,双反斜杠只是一个反斜杠.

这个:

{"foo":"\\bar"}
Run Code Online (Sandbox Code Playgroud)

因为"\ b"是有效的字符串内转义序列而起作用.