字符串: Lorem ipsum {{dolor}} sit {{amet}}, consectetur adipisicing {{elit}},
我想从上面提到的字符串中提取包含在{{}}中的所有标记的列表并对它们进行处理,即检查db是否存在,然后将它们替换为markdown链接,如下所示。
[substring](/tag/:substring_id)
我可以用
代替它们String.replace(string, ~r/\{\{.+?\}\}/, "new substring")
但这对我没有帮助,因为我无法处理子串,即检查db。
我没有找到任何String.scan或String.find类型的函数,它们将子字符串作为列表返回。如果你知道怎么做,请告诉我。
提前感谢您的努力和时间:)
答案 0 :(得分:4)
您可以将Regex.replace/4
与替换功能一起使用:
db = %{"dolor" => 1, "elit" => 2}
string = "Lorem ipsum {{dolor}} sit {{amet}}, consectetur adipisicing {{elit}},"
Regex.replace(~r/{{(.+?)}}/, string, fn whole, tag ->
if id = db[tag] do
"[#{tag}](/tag/#{id})"
else
whole
end
end) |> IO.puts
输出:
Lorem ipsum [dolor](/tag/1) sit {{amet}}, consectetur adipisicing [elit](/tag/2),
答案 1 :(得分:3)
如果您只想将匹配的正则表达式提取到值列表中,则可以使用Regex.scan/3函数。
Regex.scan(~r/\{\{.+?\}\}/, string)
#[["{{dolor}}"], ["{{amet}}"], ["{{elit}}"]]