Выберите внутренние кавычки между кавычками

1

Интересно, можете ли вы помочь мне найти регулярное выражение для соответствия внутренним кавычкам, заключенным между кавычками.

Моя проблема в том, что у меня есть недопустимый JSON файл, который выглядит как

{
   "name" : "some "name" here",
   "lastName" : "some "lastname" here"
}

Как вы можете заметить, внутренние двойные кавычки не экранированы, и у меня есть массив с сотнями записей, и некоторые из них имеют эту проблему. (Я знаю, что недопустимый JSON не может быть прочитан, поэтому я использую fs из Node, чтобы получить строчную версию файла JSON)

fs.readFileSync('./bigJSON.json','utf8')

Я сделал это регулярное выражение

/(?:\w\s)\".*\"(?:\s\w)/g

который соответствует (e "name" h) и (e "lastname" h). Интересно, есть ли способ нацеливаться только на вложенные кавычки (").

Я был бы признателен за помощь.

Теги:

1 ответ

0

Проблема в том, что регулярное выражение не помогает найти неизвестное количество вещей.

Это найдет первые два невыпадающих кавычки в цитируемой строке, используя отрицательные lookbehinds

\"(?<!\\).*(\"(?<!\\)).*(\"(?<!\\)).*\"(?<!\\)

где две группы захвата содержат оскорбительные невыпадающие кавычки. Несколько более безопасная версия будет

\"(?<!\\).*\"(?<!\\) : \"(?<!\\).*(\"(?<!\\)).*(\"(?<!\\)).*\"(?<!\\),?(?:\n|\r|\r\n)

но требует, чтобы ваши данные были достаточно последовательными. Это можно запустить несколько раз, удалив найденные оскорбительные котировки, пока их больше не будет найдено.

Я бы предположил, что лучший способ сделать это будет программным путем, поскольку регулярное выражение не подходит для этого, возможно, так же просто, как чтение файла по символу.

Обновление Только что вы заметили, что используете Javascript. Согласно http://regexr.com/, Javascript не поддерживает положительные или отрицательные образы, хотя вы должны исправлять свой файл один раз, прежде чем он понадобится, чтобы он мог использовать любой язык.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню