我有一个包含BB代码的字符串,类似于[img="image1"]something[/img]
。
我有一个如下所示的哈希映射:
{:image1 "real_file_name.jpg"}
包含真实图像路径。我想将所有[img="XXX"]YYY[/img]
替换为<img src="real_path">.....</img>
所以我需要找到所有[img=...]
标签,并用散列图中的相应值替换它们。
我知道如何在Java和类似语言中执行此操作。我怎么能在Clojure中做到这一点?
答案 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>"