如何使用rx在Emacs中创建害羞的组?

Wil*_*hes 5 emacs elisp

通常,我可以使用优秀的rx宏来创建可读的正则表达式,并确保我已经转义了正确的元字符.

(rx (any "A-Z")) ;; "[A-Z]"
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何创建害羞的群体,例如\(?:AB\).rx有时会在输出中产生它们:

(rx (or "ab" "bc")) ;; "\\(?:ab\\|bc\\)"
Run Code Online (Sandbox Code Playgroud)

但我想明确添加它们.我可以:

(rx (regexp "\\(?:AB\\)"))
Run Code Online (Sandbox Code Playgroud)

但这失败了rx.

在一个完美的世界里,我希望能够写下:

(rx (shy-group "A"))
Run Code Online (Sandbox Code Playgroud)

我会满足于这样的事情(这些都不起作用):

;; sadly, `regexp` only accepts literal strings
(rx (regexp (format "\\(?:%s\\)" (rx WHATEVER))))

;; also unfortunate, `eval` quotes the string it's given
(rx (eval (format "\\(?:%s\\)" (rx WHATEVER))))
Run Code Online (Sandbox Code Playgroud)

如何使用害羞组创建正则表达式rx

phi*_*ils 5

我认为rx表单的结构消除了显式创建害羞组的任何需要 - 可能需要害羞组的所有内容都由其他语法来解释.

例如你自己的例子:

(rx (or "ab" "bc")) ;; "\\(?:ab\\|bc\\)"
Run Code Online (Sandbox Code Playgroud)