You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rescript中通过多捕获组执行正则替换转义正则控制字符

我需要实现用户使用仅含控制符*的glob模式过滤文本字符串的功能,底层打算用Js.Re.test实现,这部分已经完成。

暂不考虑用户过滤字符串中的*,我当前遇到的难点是转义所有正则控制字符,具体来说我不知道如何替换输入文本中的捕获组来生成新字符串。

目前我编写的代码如下,但运行结果不符合预期:

let input = "test^ing?123[foo";

let escapeRegExCtrl = searchStr => {
    let re = [%re("/([\\^\\[\\]\\.\\|\\\\\\?\\{\\}\\+][^\\^\\[\\]\\.\\|\\\\\\?\\{\\}\\+]*)/g")];

    let break = ref(false);
    while (!break.contents)  {
        switch (Js.Re.exec_ (re, searchStr)) {
            | Some(result) => {
                let match = Js.Re.captures(result)[0];
                Js.log2("Matching: ", match)
            }
            | None => {
                break := true;
            }
        }
    }
};
search -> escapeRegExCtrl

暂不考虑字符串开头的"test"部分被跳过的问题,上述代码的输出结果为:

Matching: ^ing  
Matching: ?123 
Matching: [foo

以上述示例的输入为例,我最终想要得到前后带.*的输出结果:

.*test\^ing\?123\[foo.*

但我不知道如何从匹配到的捕获组生成连续的目标字符串。(类似命令行中执行echo "test^ing?123[foo" | sed -r 's_([\^\?\[])_\\\1_g'得到的效果)


编辑补充
根据Chris Maurer的回答,JS库中已有我需要的相关方法,我查阅后找到了对应的ReasonML代理方法。

内容的提问来源于stack exchange,提问作者Jamie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 16:06:08