Регулярное совпадение ключа val в массиве объектов

1

Использование https://regexr.com/ Я пытался сопоставить элементы внутри объекта данных.

JSON

{"unit":{"id":1,"val":"px","name":"px"},"type":{"id":3,"val":"HORIZONTAL_BAR","name":"Horizontal Bar"},"zoom":{"id":2,"val":"DEFAULT","name":"Show"},"scale":{"id":2,"val":"TRUE","name":"Show"},"fullscreen":{"id":1,"val":"FALSE","name":"Hide"},"street":{"id":2,"val":"TRUE","name":"Show"},"poi":{"id":1,"val":"FALSE","name":"Disable"},"draggable":{"id":2,"val":"TRUE","name":"Enable"},"doubleclick":{"id":2,"val":"TRUE","name":"Enable"},"mouse":{"id":2,"val":"TRUE","name":"Enable"},"gesture":{"id":2,"val":"auto","name":"Auto"},"map":{"id":1,"val":"ROADMAP","name":"Road Map"},"mapid":"mapkit-9479","api":"","lat":"51.343695608206275","lng":"-2.4871419408111706","zoomlvl":13,"width":600,"height":400,"position":{},"route":{},"infowindow":{"enable":false,"title":false,"tel":false,"email":false,"web":false,"desc":false},"visible":1,"lon":"-2.4871419408111706","user_id":4575,"map_url":"26T9Te","snazzy":{"id":12,"snazzy_id":11,"name":"Blue","json":"[{\"featureType\":\"all\",\"stylers\":[{\"hue\":\"#0000b0\"},{\"invert_lightness\":"true"},{\"saturation\":-30}]}]"}}

Это пример json, и если бы вы его начертили, это может потерпеть неудачу в основном из-за этого сегмента.

{\"invert_lightness\":"true"}

То, что я пытаюсь сделать, это использовать REGEX для соответствия и замены, чтобы исправить проблему

Я пытался \\"(.*)\\":"(.*)", Потому что я думал, что это будет соответствовать любому ", что не имеет косую черту, и я мог бы заменить его с косой черты, так что это будет выглядеть как {\"invert_lightness\":\"true\"} и исправить.

Но запрос regex, который я написал, заканчивается одним совпадением:

\"featureType\":\"all\",\"stylers\":[{\"hue\":\"#0000b0\"},{\"invert_lightness\":"true"},{\"saturation\":-30}]}]"

  • 2
    @wp78de: wp78de: проблема в том, что JSON не отформатирован должным образом, и спрашивающий пытается восстановить его перед использованием JSON Parser.
  • 0
    Измените первое .* помощью [^"]* и используйте негладкий квантификатор:. .*? Для второго.
Показать ещё 2 комментария
Теги:

2 ответа

1
Лучший ответ

Кажется, вы могли бы использовать

\\"(.*?)\\"

и замените это на

"$1"

См. Демонстрацию на regex101.com.


Это говорит:
\\"   # match one backslash and "
(.*?) # capture 0+ characters in between, lazily into group 1
\\"   # same as above
0

Попробуй это:

str.replace(/\\"/g, '"').replace(/"\[/g, '[').replace(/\]"/, ']')
  • 0
    Я вижу твою идею. Вы уверены, что все двойные кавычки должны быть экранированы в вашем шаблоне (внимательно посмотрите на строку)?
  • 0
    да, это было неправильно, я редактировал это сейчас, должен работать сейчас :) Но я думаю, что вы ищете больше уникального регулярного выражения для трех ошибок

Ещё вопросы

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