使用哈希映射中的值替换字符串中的所有匹配项

时间:2016-06-02 05:57:44

标签: clojure

我有一个包含BB代码的字符串,类似于[img="image1"]something[/img]。 我有一个如下所示的哈希映射:

{:image1 "real_file_name.jpg"}

包含真实图像路径。我想将所有[img="XXX"]YYY[/img]替换为<img src="real_path">.....</img>

所以我需要找到所有[img=...]标签,并用散列图中的相应值替换它们。

我知道如何在Java和类似语言中执行此操作。我怎么能在Clojure中做到这一点?

1 个答案:

答案 0 :(得分:1)

你会像任何其他语言一样完成它:迭代地用regexp找到所有需要的图像结构,捕获每个图像的必要部分,然后用新的字符串替换它(将捕获的图像id替换为来自的相应值)地图):

您可以将clojure.string/replace与regexp和替换函数一起使用,如下所示:

user> (require '[clojure.string :as s])
nil

user> (def input "[img=\"image1\"]something[/img] [img=\"image2\"]something[/img]")
#'user/input

user> (def paths {:image1 "real/path1" :image2 "real/path2"})
#'user/paths

user> (s/replace input #"\[img=\"(.+?)\"\](.*?)\[/img\]"
                 (fn [[_ img-id content]]
                   (str "<img src=\"" (paths (keyword img-id)) "\">"
                        content "</img>")))
"<img src=\"real/path1\">something</img> <img src=\"real/path2\">something</img>"