2015-10-27 3 views

ответ

2
▶ str = "{:email=>[\"has already been taken\"], :name=>[\"has already been taken\"]}" 
▶ eval(str).map { |k, v| [k.capitalize, v].join(' ') }.join(', ') 
#⇒ "Email has already been taken, Name has already been taken" 

С scan:

▶ str.scan(/:(\w+)=>\["(.*?)"\]/).map do |k, v| 
▷ [k.capitalize, v].join(' ') 
▷ end.join(', ') 
#⇒ "Email has already been taken, Name has already been taken" 
0

Другим способом сделайте это:

def convert(str) 
    arr = [' '].concat str.chars 
    str.gsub(/./) do |c| 
    case arr.shift 
    when ':' then c.upcase 
    when '=' then ' ' 
    else c =~ /[,\sa-zA-Z]/ ? c : '' 
    end 
    end 
end 

str = '{:email=>[\"has already been taken\"], :name=>[\"has already been taken\"]}' 

convert str 
    #=> "Email has already been taken, Name has already been taken" 
Смежные вопросы