If your data is well-formed json you can use a json parser.
Another way is to use a simple pattern to extract all the content inside curly brackets {([^}]++)}
and split the result.
a full regex way: (work with an undefined number of key/value)
(?>{|\G(?<!\A):[^,}]++,)\s*([^:]++)
the result is in the capture group 1
pattern details:
(?> # 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 :
example:
text = <<EOF
outter: value
{ inner1: value, inner2: value, inner3: val }
EOF
puts text.scan(/(?>{|\G(?<!\A):[^,}]++,)\s*([^:]++)/)