# RegEx(正则表达式)

# 这是什么?

RegEx 扩展让用户可以自动检测文本字符串(称为"序列")中的特定模式并对其进行操作。当与其他 SillyTavern 功能(如 QuickReplies 或 STScript)结合使用时,它可以成为一个强大的工具,或者仅仅用作从聊天中删除某些词语的方法。

# 有用的链接

本文档不会深入解释编写 RegEx 序列的过程。有许多在线资源可以帮助您学习。

# 前提条件

  • 从扩展面板(堆叠块图标)的"Download Extensions & Assets"菜单中安装"RegEx"扩展。

# 常见用例

RegEx 通常用于对聊天中的某些词语应用查找-替换功能,为某些词语或句子类型添加 markdown 样式,或向 STScript 返回布尔值。

# 脚本列表

RegEx 扩展脚本列表
RegEx 扩展脚本列表

  • 顶部的按钮用于创建新脚本。
    • "Global"脚本将应用于所有角色,并保存在 settings.json 中。
    • "Scoped"脚本仅应用于当前活动的角色,并保存在角色卡片的数据中。
  • "Import"让您导入从其他 SillyTavern 实例导出的 RegEx 脚本。

下面是您的脚本列表,带有一些操作按钮。

  • 拖动手柄(脚本名称左侧的三条水平线)让您可以将脚本拖放到任何您喜欢的顺序。
  • 主开关可以快速切换以启用或禁用脚本,而无需更改其他任何内容。禁用的脚本显示为删除线样式。如果脚本在此处被禁用,它将无法被 QuickReply 或 STScript 触发。
  • "Edit"(铅笔)按钮将打开 RegEx 脚本编辑器。
  • "Move to scoped"(向下箭头)将全局脚本转换为作用域脚本,并将其应用于当前角色。相反(向上箭头),它会将作用域脚本转换为全局脚本。
  • "Export"将使您的浏览器下载脚本的导出 .json 文件,然后可以共享并导入到另一个 SillyTavern 实例中。
  • "Delete"(垃圾桶)删除脚本。

# RegEx 编辑器

RegEx 编辑器
RegEx 编辑器

  • Test Mode:这将在编辑器顶部打开一个比较视图。在"Input"框中输入一些文本,RegEx 脚本的结果将显示在 Output 框中。这是一个有价值的调试工具,因为它会在您更改脚本设置时实时更新 Output 框。

  • Name:扩展脚本列表中显示的脚本标签。这也用于通过斜杠命令或 STScript 触发脚本时定位脚本。

  • Find Regex:这是用于检测目标文本模式的正则表达式。这通常是任何 RegEx 脚本中最复杂的部分,也是最容易出错的地方。请参考页面顶部的链接了解如何编写 RegEx 序列。如果"Macros in Find Regex"设置为允许(见下文),此框可以解析常见 SillyTavern 宏(如 {{user}}、{{char}} 等)的值。

  • Replace With:这是将替换匹配序列的内容。在一个非常简单的例子中,如果您的"Find Regex"是 apple,而您的"Replace With"是 orange,那么在应用脚本的任何文本中,所有"apple"实例都会自动更改为"orange"。

    • 在此框中添加扩展特定的宏 {{match}} 将插入完整的匹配文本序列。这通常用于为特定词语应用样式。回到上面的例子,如果在"Replace With"框中输入 **{{match}}**,所有出现的"apple"一词都会被替换为 **apple**,这将为其应用粗体 markdown 样式。

    • 变量如 $1、$2、$3 等可用于插入所谓的"捕获组"。这些是由"Find Regex"序列匹配的文本序列中的子字符串。**注意,使用这些变量需要匹配表达式包含一组括号来定义匹配字符串的哪部分算作捕获组。**请参考顶部的链接了解如何设置捕获组。

  • Trim Out:在此框中输入的文本将在应用"Replace With"过程之前从匹配的文本序列中删除。例如,如果我们的匹配是"apple",而 Trim Out 框包含"le",那么在应用"Replace With"过程之前,字母"le"将被首先删除。由于我们的"Replace With"框包含 **{{match}}**,它将导致 **app** 被放入作为"apple"的替换(首先删除"le",然后为剩余的匹配文本添加粗体 markdown 样式)。通过在要删除的每个字符串之间添加换行符,可以应用多个修剪。

  • Affects:这个复选框列表定义了 RegEx 脚本将应用于哪些文本源。

    • "User Input":脚本将在用户点击发送后对用户输入的内容运行。
    • "AI Response":脚本将在收到 AI 响应后对其内容运行。
    • "Slash Commands":脚本将对斜杠命令插入到提示词/聊天中的值运行。
    • "World Info":脚本将对注入到提示词中的世界信息条目的内容运行。需要勾选"Alter Outgoing Prompt"(或两个临时性框都未勾选)。
    • "Reasoning":脚本将对 Gemini 或 Deepseek 等聊天补全 API 返回的"reasoning"对象的内容运行。如果在临时性下勾选了"Alter Outgoing Prompt",脚本也将应用于后续聊天轮次中添加到提示词中的任何推理块。
    • 如果这里都未勾选,脚本在正常聊天期间将永远不会激活,但仍可以通过斜杠命令或 STScript 激活。
  • Min/Max Depth:在聊天历史中向后查找要匹配的字符串的深度。两者都留空以将脚本应用于整个聊天。

  • Other Options

    • "Disabled"防止脚本运行。当您只是不想更改脚本的任何设置和/或不想通过脚本列表上的开关完全禁用它时(因为这样做会阻止斜杠命令触发它),这可以用作覆盖。
    • "Run on Edit"使脚本在编辑聊天消息后也运行。如果未勾选此项,编辑的聊天消息内容将不会触发脚本。
  • Macros in Find Regex:选择是否替换 Find Regex 框序列中存在的宏(如 {{user}}、{{char}} 等)。

    • "Don't Substitute"将导致任何 SillyTavern 宏被忽略,因此 RegEx 脚本在搜索时会按字面处理它们。
    • "Raw"将按原样发送宏的值。如果宏的值包含某些特殊字符,这可能会改变您的 RegEx 脚本搜索文本的方式。
    • "Escaped"将在每个字符前添加 RegEx 转义斜杠 \,以确保它们不会意外改变整体 RegEx 序列。如果宏的值中有某些特殊字符,这可能很有用。

# 临时性

默认情况下(当这里的两个框都未勾选时),RegEx 脚本将直接编辑存储在聊天 JSONL 文件中的文本值。这确保了输出提示词和聊天显示始终包含相同的值。但是,这些对聊天文件的更改是不可逆的。

如果您不希望这样,您可以启用这里的任一复选框,将 RegEx 脚本的影响限制为仅显示或输出提示词。

如果只勾选了一个框,将不会对聊天文件进行任何更改,但只有勾选的项目会得到更改。这意味着您看到的是一回事,而 LLM 看到的是另一回事。请谨慎使用。

如果两者都选中,脚本将在所有方面正常运行,除了不会将任何更改写入聊天文件。

# 高级用法

虽然 RegEx 通常用作简单的查找/替换工具,但它也可以以更复杂的方式使用。

例如,"Replace With"框可以包含一组 CSS 规则和 HTML,以在找到某个词时在聊天中添加特定样式的 HTML 元素。这需要在用户设置面板中取消勾选 Show <tags> in responses 框。

脚本也可以设置为在正常使用期间永不触发,而是通过斜杠命令作为 STScript 内部逻辑检查的一部分触发。"Replace With"框将包含脚本识别的唯一值,以指示逻辑检查是真还是假。这将 RegEx 的实用性扩展到所有斜杠命令的全部功能,允许基于聊天内容进行真正无限级别的控制和自动化。