JSON.parse () проблема со значениями регулярного выражения - PullRequest
6 голосов
/ 07 марта 2011

У меня есть следующая строка JSON, закодированная с помощью PHP 5.2 json_encode ():

{"foo":"\\."}

Эта строка JSON действительна.Вы можете проверить это в http://www.jsonlint.com/

Но собственный метод JSON.parse () (Chrome, Firefox) выдает следующую ошибку при разборе:

SyntaxError: Unexpected token ILLEGAL

Кто-нибудь изВы знаете, почему я не могу разобрать экранированные метасимволы регулярных выражений?

Этот пример работает:

{"foo":"\\bar"}

Но этот пример также не работает:

{"foo":"\\?"}

Кстати: \. - это просто простое тестовое регулярное выражение, которое я хочу запустить через объект RegExp в javascript.

Спасибо за вашу поддержку,

Dyvor

Ответы [ 3 ]

9 голосов
/ 07 марта 2011

Это «не работает», потому что вы упускаете ключевой момент: два синтаксических анализа строк происходят при вводе в консоль Chrome строки, подобной:

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

Анализ строки first происходит, когда интерпретатор JavaScript анализирует строковую константу, которую вы передаете методу parse (). второй анализ строки происходит внутри самого анализатора JSON. После первого прохода двойная обратная косая черта - это всего лишь одна обратная косая черта.

Вот этот:

{"foo":"\\bar"}

работает, потому что "\ b" является допустимой escape-последовательностью внутри строки.

1 голос
/ 07 марта 2011

У меня это работает в консоли firebug.

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

, что правильно, так как синтаксический анализатор json фактически получает "\\.", т.е.

Действительно ли проблема возникла с ответом от PHP? Или просто в «ручном» тесте?

0 голосов
/ 07 марта 2011

добавить дополнительный набор \\, почему он работает, я не совсем уверен.

JSON.parse('{"foo":"\\\\."}');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...