Соответствующий Dart RegExp будет:
static final RegExp shortcodeMedia = RegExp(r'"shortcode_media":(\{.+\})");
Хотя это не работает. JSON не является обычным языком, поэтому вы не можете разобрать его с помощью регулярных выражений.
Значение "shortcode_media"
в вашем примере JSON заканчивается несколькими }
символами. RegExp остановит матч на третьем из них, даже если второй }
соответствует первому {
. Если ваш текст JSON содержит какие-либо дополнительные значения после записи shortcode_media
, они также могут быть включены.
Остановка на первом }
также будет слишком короткой. Если кто-то переупорядочит исходный код JSON на эквивалентный
"shortcode_media":{"dimensions":{"height":1326,"width":1080},"__typename":"GraphSidecar","id":"2260708142683789190","shortcode":"B9fphP5gBeG"}
(то есть, поставив запись "dimensions"
на первом месте), то вы будете захватывать только до конца блока измерений.
Я бы порекомендовал либо использовать правильный JSON синтаксический анализатор, либо, по крайней мере, улучшить RegExp, чтобы иметь возможность обрабатывать один вложенный JSON объект - поскольку вы, похоже, уже знаете, что это произойдет. Такой RegExp может быть:
RegExp(r'"shortcode_media":(\{(?:[^{}]*(?:\{.*?\})?)*?\})')
Этот RegExp будет захватывать правильное количество фигурных скобок для примера кода, но все равно не будет работать, если есть больше вложенных JSON объектов. Только настоящий парсер может правильно обрабатывать общий случай.