Если ваши данные хорошо сформированы json, вы можете использовать json-парсер.
Другой способ - использовать простой шаблон для извлечения всего содержимого внутри фигурных скобок {([^}]++)}
и разделить результат.
полный регулярное выражение так: (работа с неопределенным количеством ключ/значение)
(?>{|\G(?<!\A):[^,}]++,)\s*([^:]++)
результат в группе захвата 1
модели детали:
(?> # atomic group: all that can be before the key
{ # literal: {
| # OR
\G(?<!\A) # contiguous to a precedent match but not a the start of the string
:[^,}]++, # a : followed by all that is not a , or } followed by a ,
) # close the atomic group
\s* # possible spaces
([^:]++) # capture group 1: all that is not a :
пример :
text = <<EOF
outter: value
{ inner1: value, inner2: value, inner3: val }
EOF
puts text.scan(/(?>{|\G(?<!\A):[^,}]++,)\s*([^:]++)/)
Похоже, что JS ON, но это не так, и мне нужно жестко закодированное регулярное выражение, потому что у меня нет такой опции, как сериализация этих кодов в объект JSON. –