Skip to content

高级替换功能

高级替换功能,可以标识和替换多个字符串,经常用在 AI 内容审批、合同审核等场景中,如下图所示:

advanced-replace.png

PS:此功能【右侧】为产品方自定义开发,当前文档 API 在 Pro 版本才有,开源版没有当前功能。 Pro 版预览地址:http://pro.aieditor.com.cn

支持特性

  • 多关键词同时搜索、高亮和替换
  • 支持区分大小写选项
  • 支持正则或字面量搜索
  • 高亮当前匹配项(.search-result-current)
  • 跨关键词循环跳转
  • 单个/批量替换
  • 滚动到当前结果
  • 可自定义关键字区域的 HTML 属性(如 class, style, data-* 等)

⚙️ 配置选项(Options)

选项类型默认值说明
disableRegexbooleantrue是否禁用正则表达式,启用后按字面量精确匹配
searchResultClassstring"search-result"匹配关键词的高亮 CSS 类名
onKeywordActivated(term: SearchTerm, range: Range, resultIndex: number) => voidundefined当用户选中某个高亮关键词时触发的回调

🔔 提示:onKeywordActivated 在每次光标进入某个匹配区域时触发一次(去重处理)。

示例代码:

ts
new AiEditorPro({
    element: "#aiEditor",
    search: {
        disableRegex: false,
        searchResultClass: "search-result",
        onKeywordActivated: (term: SearchTerm, range: Range, resultIndex: number) => {
        },
    },
})

🧩 开始搜索

设置搜索项

setSearchTerms(terms: SearchTerm[])

设置要搜索的关键词列表。

ts
aieditor.commands().setSearchTerms([
    {
        keyword: "AIEditor",
        replace: "AIEditorPro",
        caseSensitive: false,
        attrs: {class: "highlight-vue", 'data-type': 'framework'}
    },
    {
        keyword: "React",
        replace: "React.js",
        caseSensitive: true,
        attrs: {style: "background: yellow; font-weight: bold;"}
    }
]);

调用后会自动重新计算所有匹配结果并高亮。 attrs 支持自定义属性,如 class, style, data-* 等。

SearchTerm 接口详解

ts
interface SearchTerm {
    keyword: string;           // 必填:要搜索的关键词
    replace: string;           // 非必填:替换内容,不填写的时候不进行替换,如要替换为空字符串,请填写 ""
    caseSensitive?: boolean;   // 是否区分大小写,默认 false
    disableRegex?: boolean;    // 是否禁用正则转义,默认使用全局 disableRegex
    attrs?: Record<string, string | undefined>; // 自定义 HTML 属性
}

示例:带样式的高亮

ts
{
    keyword: "bug",
        replace
:
    "fix",
        attrs
:
    {
        class

    :
        "error-highlight",
            style
    :
        "color: red; text-decoration: wavy underline;",
            'data-tooltip'
    :
        'Known issue'
    }
}

更多的方法

🧪 使用示例:完整搜索替换流程

ts
// 1. 设置搜索项
editor.commands().setSearchTerms([
    {keyword: "hello", replace: "hi", attrs: {class: "greeting"}},
    {keyword: "world", replace: "earth", caseSensitive: true}
]);

// 2. 跳转到下个搜索结果
editor.commands().resetSearchIndex();

// 3. 滚动到该位置
editor.commands().scrollToSearchResult();

// 4. 替换当前项
editor.commands().replace();

// 5. 替换所有 "hello"
editor.commands().replaceAllForKey("hello");

// 6. 清除搜索
editor.commands().clearSearch();

📚 API 总览

命令参数说明
setSearchTerms(terms)SearchTerm[]设置搜索关键词
setReplaceForTerm(i, r)number, string更新某关键词的替换文本
resetSearchIndex()跳转到第一个匹配
setSearchIndex(i)number跳转到指定索引
nextSearchResult()下一个匹配(循环)
previousSearchResult()上一个匹配
replace()替换当前项
replaceAll()替换所有匹配
nextSearchResultFor(k)string下一个指定关键词
previousSearchResultFor(k)string上一个指定关键词
replaceAllForKey(k)string替换所有某关键词
clearSearch()清除所有搜索状态
clearSearchFor(k)string清除指定关键词
scrollToSearchResult()滚动到当前匹配

🎨 样式建议

默认类名为 .search-result.search-result-current。你可以添加 CSS 来美化高亮效果:

css
.aie-content .search-result {
    background-color: #fffb00;
    border-bottom: 2px solid #fffb0080;
    cursor: pointer;
}

.aie-content .search-result-current {
    background-color: #ff69b4;
    color: white;
}