字符串:
Lorem ipsum {{dolor}} sit {{amet}}, consectetur adipisicing {{elit}},
我想从上面提到的字符串中提取包含在 {{ }} 中的所有标签的列表并对其进行处理,即检查数据库是否存在,然后将它们替换为降价链接,如下所示。
[substring](/tag/:substring_id)
我可以用
替换它们String.replace(string, ~r/\{\{.+?\}\}/, "new substring")
但这对我没有帮助,因为我无法处理子字符串,即检查数据库。
我没有找到任何将子字符串作为列表返回的 String.scan 或 String.find 类型的函数。如果您知道该怎么做,请告诉我。
预先感谢您的努力和时间:)
如果您只想将匹配的正则表达式提取到值列表中,可以使用 Regex.scan/3 函数。
Regex.scan(~r/\{\{.+?\}\}/, string)
#[["{{dolor}}"], ["{{amet}}"], ["{{elit}}"]]
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),