Regex

它是什么?

Regex 扩展允许用户自动检测文本字符串中的特定模式(称为“序列”)并对其应用操作(替换)。当它与其他 SillyTavern 功能(例如快捷回复或 STscript)配合使用时,可以成为一个强大的工具;也可以简单地用来从对话中移除某些词语。

帮助链接

本文档不会深入讲解编写 RegEx 序列的过程。网上有许多资源可以帮助你完成这一工作。

前置条件

Regex 是 SillyTavern 的内置扩展,因此无需额外设置。

你可以在 扩展 面板中找到它的设置。

常见用例

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

脚本列表

RegEx 扩展脚本列表
RegEx 扩展脚本列表
  • 顶部的按钮用于新建脚本。
    • “Global”脚本会应用于所有角色,并保存到 settings.json 中。
    • “Scoped”脚本仅应用于当前活动角色,并保存到角色卡的数据中。
  • “Import”用于导入从其他 SillyTavern 实例导出的 RegEx 脚本。

下方是你的脚本列表以及一些操作按钮。

  • 拖拽手柄(脚本名左侧的三条横线)允许你将脚本拖拽排列成任意顺序。
  • 主开关可以快速切换以启用或禁用脚本,而无需更改其他任何内容。已禁用的脚本以删除线样式显示。如果某个脚本在此处被禁用,快捷回复或 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}} 将插入完整的匹配文本序列。这通常用于为特定词语应用样式。回到上面的示例,如果将 **{{match}}** 放入“Replace With”框中,所有出现的“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”:脚本会对聊天补全 API(如 Gemini 或 Deepseek)返回的“reasoning”对象的内容运行。如果在 Ephemerality 下勾选了“Alter Outgoing Prompt”,该脚本也将应用于在后续对话回合中添加到提示词中的任何推理区块。
    • 如果此处所有选项都不勾选,脚本在正常聊天期间永远不会激活,但仍可通过斜杠命令或 STscript 激活。
  • Other Options

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

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

深度设置

Min/Max 深度设置可让你精确控制正则表达式模式将影响聊天历史中的哪些消息:

  • Min Depth:仅影响聊天历史中至少深入 N 层的消息

    • 0 = 最后一条消息
    • 1 = 倒数第二条消息
    • 以此类推。
    • 当留空(设为“Unlimited”)或为 -1 时,也会影响在 Continue 操作时要继续的消息
  • Max Depth:仅影响聊天历史中深度不超过 N 层的消息

    • 必须大于 Min Depth,正则表达式才会应用
    • 系统提示词和实用提示词不受这些设置影响

例如,将 Min Depth 设为 0、Max Depth 设为 2,将仅把你的正则表达式应用于聊天中最近的三条消息。

标志

默认情况下,Find Regex 模式区分大小写,并且仅匹配第一个结果。要调整此行为以及其他 RegEx 标志,你可以像这样添加它们:

/yourpattern/flags

示例:/yourpattern/gi 将匹配文本中所有出现的“yourpattern”,不区分大小写。

一些最常见的标志如下:

  • i:不区分大小写
  • g:全局(应用于所有匹配,而不仅是第一个)
  • s:dotAll(将输入视为单行,因此 . 也会匹配换行符)
  • m:多行(将输入视为多行,因此 ^$ 会匹配每一行的开头/结尾,而不仅是整个字符串)
  • u:unicode(将输入视为 unicode,因此 \d\w 等会匹配 unicode 字符)

有关 RegEx 标志的更多信息,请参阅以下 MDN 页面:Advanced searching with flags

临时性

默认情况下(此处两个复选框都不勾选时),RegEx 脚本会直接编辑存储在对话 JSONL 文件中的文本值。这确保了发送给模型的提示词和对话显示始终包含相同的值。但是,这些对对话文件的更改是不可逆的。

如果你不希望发生这种情况,可以启用此处的任一复选框,将 RegEx 脚本的影响限制为仅显示或仅发送给模型的提示词。

如果只勾选其中一个复选框,则不会对对话文件进行任何更改,但仅会更改所勾选的项目。这意味着你看到的内容与 LLM 看到的内容会不一致。请谨慎使用。

如果两个都勾选,脚本将在所有方面正常工作,除了它不会向对话文件写入任何更改。

高级用法

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

例如,“Replace With”框可以包含一组 CSS 规则和 HTML,以便每当发现某个词语时,就在你的对话中添加一个特定样式的 HTML 元素。这需要在用户设置面板中取消勾选 Show <tags> in responses 复选框。

该脚本还可以设置为在正常使用期间永不触发,而是作为 STscript 内逻辑检查的一部分通过斜杠命令触发。“Replace With”框将包含一个脚本可识别的唯一值,用于指示逻辑检查为 true 还是 false。这将 RegEx 的功能扩展到所有斜杠命令的全部能力,从而实现基于对话内容的真正无限级别的控制和自动化。