我有以下哈希数组:
[
{"type"=>"paragaph", "class"=>"red", "content"=>"[class:intro|body:This is the introduction paragraph.][body:This is the second paragraph.]"},
{"type"=>"image", "class"=>"grid", "content"=>"[id:1|title:image1][id:2|title:image2][id:3|title:image3]"}
]
我正在尝试将包含方括号的哈希值转换为值数组。这非常好 - 问题在于它破坏了所有其他不包含方括号的哈希值。
pipe_regex = /\|\s*(?=[^\[\]]*(?:\[|$))/
colon_regex = /\:\s*(?=[^\[\]]*(?:\[|$))/
array_hash.map {|m| m.update(m) {|k,v| v.scan(/\[(.*?)\]/).map {|m| m[0].split(pipe_regex)}.map {|m| m.map {|n| n.split(colon_regex)}}}}
这有点混乱,但上面的代码找到了每个哈希值并根据 '[]' 字符划分它们 - 但似乎也破坏了没有 '[]' 的任何东西。然后它继续在'|'处拆分它们 然后拆分':',这似乎工作得很好。
然后我将这些值转换为散列,因此包含方括号的原始值现在是散列数组。
array_hash.map {|m| m.update(m) {|k,v| v.map {|n| Hash[n]}}}
这似乎也可以正常工作。一切的最终结果是:
[
{"type"=>[], "class"=>[], "content"=>[{"class"=>"intro", "body"=>"This is the introduction paragraph."}, {"body"=>"This is the second paragraph."}]},
{"type"=>[], "class"=>[], "content"=>[{"id"=>"1", "title"=>"image1"}, {"id"=>"2", "title"=>"image2"}, {"id"=>"3", "title"=>"image3"}]}
]
我怎样才能.scan(/\[(.*?)\]/)
只适用于包含'[]'的字符串?所以这是结果:
[
{"type"=>"paragraph", "class"=>"red", "content"=>[{"class"=>"intro", "body"=>"This is the introduction paragraph."}, {"body"=>"This is the second paragraph."}]},
{"type"=>"image", "class"=>"grid", "content"=>[{"id"=>"1", "title"=>"image1"}, {"id"=>"2", "title"=>"image2"}, {"id"=>"3", "title"=>"image3"}]}
]