如何扫描单行参数字符串并返回两个数组?

我有以下单行字符串:

params = {"FieldStructure"=>"{\"Fields\":[{\"Title\":\"Company Name\",\"Type\":\"text\",\"ID\":\"Field6\"},{\"Title\":\"Email\",\"Type\":\"email\",\"ID\":\"Field5\"}]}", "Field6"=>"tettetette", "Field5"=>"test@tessss.pl", "EntryId"=>"25"} 

格式版:

 params = { "FieldStructure"=>" {\"Fields\":[ {\"Title\":\"Company Name\",\"Type\":\"text\",\"ID\":\"Field6\"}, {\"Title\":\"Email\",\"Type\":\"email\",\"ID\":\"Field5\"}]}", "Field6"=>"tettetette", "Field5"=>"test@tessss.pl", "EntryId"=>"25" } 

我想收到: [["Company Name", "Field6"], ["Email", "Field5"]]

我尝试使用扫描方法,但有一些问题:

 >> fields = params['FieldStructure'].scan(/Title\":\"(.+?)\".+ID\":\"(.+?)\"/) => [["Company Name", "Field5"]] 

怎么做到这一点?

非正则表达式解决方案:

 require 'json' params = {"FieldStructure"=>"{\"Fields\":[{\"Title\":\"Company Name\",\"Type\":\"text\",\"ID\":\"Field6\"},{\"Title\":\"Email\",\"Type\":\"email\",\"ID\":\"Field5\"}]}", "Field6"=>"tettetette", "Field5"=>"test@tessss.pl", "EntryId"=>"25"} a = JSON.parse(params["FieldStructure"]) out = a["Fields"].map {|a| [a["Title"],a["ID"]]} p out # [["Company Name", "Field6"], ["Email", "Field5"]] 

正确的方法是:

 params['FieldStructure'].scan(/Title\":\"(.+?)\".+?ID\":\"(.+?)\"/) 

ID之前的。+是greddy,意味着它会占用最多的字符,直到找到下一个ID。 的? 最终把它变成了无所畏惧。