[问题] replace-regexp-in-string 是怎么使用匹配组的

(replace-regexp-in-string "\\((h.*)\\)" "[\\1] 22" "[using](https)" nil 'literal)

想使用 replace-regexp-in-string

[using](https) 替换成 [[https][using]]

可是 匹配组一直用不上

(replace-regexp-in-string (rx "[" (group (1+ anychar)) "]"
                              "(" (group (1+ anychar)) ")")
                          "[[\\1]][[\\2]]"
                          "[using](https)")
;; => "[[using]][[https]]"

在 Elisp 中,({ 不转义表示原含义,转义后才表示分组

1 个赞

你为什么要用 'literal 这个参数,用了不就是替换成 \\1 这种字符串吗?

(replace-regexp-in-string "\\[\\(using\\)\\](\\(https\\))" "[[\\2]][[\\1]]" "[using](https)")
;; => "[[https]][[using]]"

(replace-regexp-in-string "\\[\\(using\\)\\](\\(https\\))" "[[\\2]][[\\1]]" "[using](https)" nil 'literal)
;; => "[[\\2]][[\\1]]"

这个修改抄的代码,就没有改后面