2017-10-11 1 views
1

je dois convertir cette chaîneString.replace dans Elixir

"/{foo}/{bar}.{format}" 

dans

"/#{a["foo"]}/#{a["bar"]}.#{a["format"]}" 

Parce que j'ai une liste avec ces attributs. par exemple

a["foo"] = "home" 
a["bar"] = "picture" 
a["format"] = "jpg" 

J'essaie de quelque chose comme ça

String.replace(a,"{",~s(#{)) 

Mais j'eu cette erreur (

SyntaxError) IEX: 8: jeton inattendu:)

J'essaie même une regexp pour créer une liste pour essayer d'avoir mon résultat mais je on't comprendre comment puis-je appliquer cette expression rationnelle ([^{]*?)\w(?=\})

Répondre

4

En supposant que vous voulez que la chaîne "/home/picture.jpg" que le résultat, vous pouvez utiliser Regex.replace/3 avec une fonction de remplacement:

map = %{ 
    "foo" => "home", 
    "bar" => "picture", 
    "format" => "jpg", 
} 

string = "/{foo}/{bar}.{format}" 

Regex.replace(~r/{([a-z]+)?}/, string, fn _, match -> 
    map[match] 
end) 
|> IO.inspect 

Sortie:

"/home/picture.jpg" 
+0

Incroyable! c'est ce que je cherche! – monkeyUser