Regex 函数在作用于正则表达式组(Clojure)时行为不正常

Regex 函数在作用于正则表达式组(Clojure)时行为不正常,regex,clojure,Regex,Clojure,下面的代码有一个让我吃惊的错误。我的目标是用相对链接的标记格式替换用双方括号括起来的内容。“slug”函数是删除空格和更改文件扩展名的助手。当我直接调用它时,它似乎工作得很好——它将“itsalink”转换为“its-a-link.html”。但当我在“$1”上调用它时,它会修复文件扩展名,但不会将空格转换为连字符。这是我第一次使用“$1”,所以我打赌问题出在哪里 (ns grothendieck.nanoformats (:require [clojure.string :as strin

下面的代码有一个让我吃惊的错误。我的目标是用相对链接的标记格式替换用双方括号括起来的内容。“slug”函数是删除空格和更改文件扩展名的助手。当我直接调用它时,它似乎工作得很好——它将“itsalink”转换为“its-a-link.html”。但当我在
“$1”
上调用它时,它会修复文件扩展名,但不会将空格转换为连字符。这是我第一次使用
“$1”
,所以我打赌问题出在哪里

(ns grothendieck.nanoformats
  (:require [clojure.string :as string])
  (:require [swiss.arrows :refer :all]))

(defn slug [f]
  "Replaces a filename's spaces with friendly hyphens and prepares its file extension."
  (-<> f
      (string/lower-case)
      (string/replace <> " " "-")
      (string/replace <> #"\.(wiki|md)" "")
      (str <> ".html")))

(defn internal-links [text]
  (string/replace text #"\[\[(.+)\]\]" (str "[$1](" (slug "$1") ")")))
(ns grothendieck.nanoformats)
(:require[clojure.string:as string])
(:require[瑞士箭头:参考:全部])
(定义段塞[f]
“用友好的连字符替换文件名的空格,并准备其文件扩展名。”
(-f)
(字符串/小写)
(字符串/替换为“-”)
(字符串/替换为#“\(wiki | md)”)
(str“.html”))
(defn内部链接[文本]
(字符串/替换文本“\[\[(.+)\]\]”(str“[$1](“(slug“$1”)))

函数
slug
“$1”
作为参数获取,因为
str
表单在
string/replace
看到它之前已完全求值。您需要的不是模式字符串,而是函数

(defn internal-links
  [text]
  (string/replace text #"\[\[(.+)\]\]"
                  (fn [[full-match first-group]]
                    (str "[" first-group "](" (slug first-group) ")"))))

这台发动机使用BRE吗?哦!当然,我认为使用瑞士箭头让我觉得我可以穿任何旧东西,它会实现我的意思,而不是我说的。