# Regex

# 它是什么?

Regex 扩展允许用户自动检测文本字符串中的特定模式(称为"序列")并对它们应用操作(替换)。当与其他 SillyTavern 功能(如快速回复或 STscript)结合使用时,它可以成为一个强大的工具,或者只是从聊天中删除某些单词的一种方式。

# 有用链接

本文档不会深入解释编写 RegEx 序列的过程。有许多在线资源可以帮助您完成这项任务。

# 先决条件

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

您可以在 扩展面板中找到其设置。

# 常见用例

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

# 脚本列表

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

  • 顶部的按钮用于创建新脚本。
    • "全局"脚本将应用于所有角色,并将保存到 settings.json 中。
    • "范围"脚本将仅应用于当前活动角色,并将保存到角色卡的数据中。
  • "导入"允许您导入从另一个 SillyTavern 实例导出的 RegEx 脚本。

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

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

# RegEx 编辑器

RegEx 编辑器
RegEx 编辑器

  • 测试模式:这将在编辑器顶部打开一个比较视图。在"输入"框中键入一些文本,您的 RegEx 脚本的结果将显示在输出框中。这是一个宝贵的调试工具,因为它会在您更改脚本设置时实时更新输出框。

  • 名称:显示在扩展脚本列表上的脚本标签。这也用于在通过斜杠命令或 STscript 触发脚本时定位脚本。

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

  • 替换为:这将替换匹配的序列。在一个非常简单的例子中,如果您的"查找 Regex"是 apple,而您的"替换为"是 orange,那么在应用脚本的任何文本中,"apple"的第一个出现将自动更改为"orange"。

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

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

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

  • 影响:此复选框列表定义了 RegEx 脚本将应用的文本源。

    • "用户输入":脚本将在用户点击发送后针对用户键入输入的内容运行。
    • "AI 响应":脚本将在收到 AI 响应后针对其内容运行。
    • "斜杠命令":脚本将针对由斜杠命令插入到提示/聊天中的值运行。
    • "世界信息":脚本将针对世界信息条目的内容运行,因为它们被注入到提示中。需要选中"修改传出提示"(或取消选中两个临时性框)。
    • "推理":脚本将针对由 Gemini 或 Deepseek 等聊天完成 API 返回的"推理"对象的内容运行。如果在临时性下选中"修改传出提示",脚本还将应用于在后续聊天回合中添加到提示中的任何推理块。
    • 如果此处未选中任何内容,脚本在正常聊天期间永远不会激活,但仍可以通过斜杠命令或 STscript 激活。
  • 其他选项

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

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

# 深度设置

最小/最大深度设置提供了对聊天历史记录中哪些消息将受您的正则表达式模式影响的精确控制:

  • 最小深度:仅影响聊天历史记录中至少 N 层深度的消息

    • 0 = 最后一条消息
    • 1 = 倒数第二条消息
    • 等等。
    • 当为空(设置为"无限制")或 -1 时,也将影响继续操作的消息
  • 最大深度:仅影响聊天历史记录中不超过 N 层深度的消息

    • 必须大于最小深度才能应用正则表达式
    • 系统提示和实用程序提示不受这些设置的影响

例如,将最小深度设置为 0,最大深度设置为 2,将仅将您的正则表达式应用于聊天中最近的三个消息。

# 标志

默认情况下,查找 Regex 模式区分大小写并仅应用于第一个匹配项。要调整此行为以及其他 RegEx 标志,您可以像这样添加它们:

/yourpattern/flags

示例:/yourpattern/gi 将匹配文本中"yourpattern"的所有实例,无论大小写。

一些最常见的标志是:

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

有关 RegEx 标志的更多信息,请参阅以下 MDN 页面:使用标志进行高级搜索

# 临时性

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

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

如果仅选中一个框,则不会对聊天文件进行任何更改,但仅选中的项目将被更改。这意味着您将看到一件事,但 LLM 将看到另一件事。请谨慎使用。

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

# 高级使用

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

例如,"替换为"框可以包含一组 CSS 规则和 HTML,以便在找到某些单词时向聊天中添加特定样式的 HTML 元素。这将需要用户设置面板中的"在响应中显示 "框未选中。

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