酒馆正则表达式教程:从入门到实战的完整指南
酒馆正则表达式教程:从入门到实战的完整指南
Contents
酒馆正则是一种自动执行的查找替换规则,可折叠思考链、清除 OOC 旁注、把状态标记美化为可视界面。本教程从原理、执行时机、深度控制到测试工具完整讲解,零基础可上手,也适合进阶调试。
简介
这篇教程教你如何在 SillyTavern(俗称「酒馆」)及兼容酒馆正则语义的平台中创建、调试和使用正则规则,把模型输出的原始文本按你的需要折叠、隐藏、替换或美化。适合刚导入带正则角色卡的新手,也适合想自行编写或调试复杂规则的进阶玩家。
前置准备
开始之前,请确认以下环境与工具就绪:
- 宿主环境:SillyTavern(最新稳定版即可),或其他声明兼容酒馆正则语义的前端(如 AIO Hub、各移动端酒馆 App)。不同宿主的入口位置略有差异,但语义一致。
- 一份可测试的对话:建议先新建一个空白聊天或导入一张带正则的卡,用作观察对象。
- 基础正则语法:知道什么是「模式」、什么是「捕获组」(
$1、$2)、什么是贪婪与非贪婪(*与*?)就够用。不想学也完全可以,用内置预制模板或让 AI 辅助即可。 - 可选参考:MDN 正则教程(系统语法)、SillyTavern 官方文档中关于「Ephemerality」的章节(执行时机官方说明)。
- 一个在线验证器(可选):部分教程提到网页版酒馆正则测试器,可以离线比对替换前后,不必占用真实聊天做试验。
不要求会写脚本;普通玩家日常就是从模板起步,改几个变量就能跑。
分步教程
步骤 1:先分清三档「执行时机」
这是第一次接触酒馆正则时最该先搞清的一件事。不同界面会把它做成「两个复选框」或「三档下拉」,本质相同:
| 执行时机 | 你屏幕看到的 | 模型下一轮看到的 | 聊天文件存的 | 可撤销 |
|---|---|---|---|---|
| 双向(双向显示+提示词,两个复选框都开) | 已替换 | 已替换 | 已替换 | 不可逆 |
| 仅显示(不改提示词) | 已替换 | 原始文本 | 原始文本 | 关掉规则即恢复 |
| 仅提示词(不改显示) | 原始文本 | 已替换 | 原始文本 | 关掉规则即恢复 |
注意点:美化类正则(把 <status> 替换成带花边的状态栏)走的是「仅显示」,不会污染聊天记录,也不额外消耗 token;删除思考链或清理 OOC 通常走「双向」,改动是永久的、没有撤销键。所以第一次编辑规则时,先在管理页确认它落在哪一档。
不同界面表述略有差异:Foreverse 教程用「双向 / 仅显示 / 仅提示词」三档,小酒窝教程用「短暂 + 仅格式显示 + 仅格式提示词」的组合表达。两者不是冲突,把「两个复选框同时开」对应到「双向」即可。看实际落盘的字段名比死记标签更可靠。
步骤 2:新建第一条正则
以「隐藏状态栏」为例,这是小酒窝教程和 TavernWeave 教程都示范过的入门场景。假设模型稳定输出:
<status>
地点:学生会办公室
时间:14:30
</status>
- 打开全局正则管理页(SillyTavern 路径:设置 → 角色卡与酒馆 → 酒馆全局设置 → 「预设 / 正则 / 宏」→ 管理全局正则)。
- 点「新建正则」。
- 查找正则表达式填:
/<status>[\s\S]*?<\/status>/gm(匹配<status>...</status>整段,非贪婪)。 - 替换为留空——留空即删除命中内容。
- 勾选「仅显示」档,回到聊天即可看到状态栏只在 UI 层被隐藏,记录原样保留。
关键注意点:[\s\S] 是为了跨行匹配;*? 而非 * 是为了非贪婪,避免把连续多个状态块当成一个大块。
步骤 3:理解「作用范围」与「深度」
酒馆正则的第二层控制是「谁的消息被处理」和「第几楼开始处理」:
- 作用范围:默认只作用于 AI 回复;可勾选扩展到「用户输入」「世界书」「思考链」「Slash」。多选生效。美化包一般只勾 AI 回复。
- 深度(楼层范围):
- 「最大深度 = n」表示规则只在最近 n 楼生效。
- 「最小深度 = n+1」表示规则只在第 n+1 楼及更早生效。
- 小酒窝教程的实战例子——「不发送 4 楼外的状态栏」——就是勾选「仅格式提示词」+「最小深度 = 4」,让 96 楼及更早的状态栏不再被送入 chat history,从而节省 token,同时不影响 UI 显示。
注意点:深度数值是「从当前最新一层往回倒数」,聊天楼层不同,门槛楼层会随之移动。GrayWill-ST 仓库在 v0.40 更新里明确提到过旧正则的「生效层数」有过 bug,并升级到新版本酒馆配套正则修复,说明深度逻辑有一定版本敏感性,排障时要先核对版本。
步骤 4:用宏和转义模式处理动态变量
如果你要写通用规则(而非只作用于一张卡),文字里会不可避免地出现 {{user}}、{{char}}:
- 宏替换:查找和替换两端都支持
{{user}}(用户名)和{{char}}(角色名)等动态变量,运行时按当前会话填充。 - 转义模式:推荐使用
Escaped模式。系统会自动处理用户名中的特殊字符(例如C.C.里的点号),避免这些字符被当成正则元字符而破坏语法。 - 后处理(Trim Strings):在捕获组之后附带「删除多余省略号」「去尾部空白」等清洗动作,无需再写一条独立规则。
这些能力来自 AIO Hub 的文本处理文档,语义与主流酒馆前端一致。
步骤 5:借助模板与测试沙箱
不想从零写正则时,编辑器通常内建以下工具:
- 预制规则库:可一键插入「折叠思考块」「移除多余空行」「URL 转链接」「隐藏 OOC 旁注」「台词高亮」「去掉加粗星号」等常用模板——根据 Foreverse 教程,前三条模板通常是「仅显示」档,随便试不心疼。
- 测试沙箱:编辑器底部提供一个测试输入框,实时显示匹配次数;命中部分黄色高亮,替换后结果绿色高亮,保存前即可确认效果。
- 脚本处理(高级):除简单文本替换外,可切换到「脚本处理」模式,用一段 JavaScript(支持
match、groups等变量)实现「把匹配文字转大写」「按条件生成不同格式」等逻辑加工。
关键注意点:脚本处理会引入额外执行能力,导入带脚本的预设时,宿主通常会自动执行「风险扫描」。看到警告不要直接忽略,检查它实际访问了哪些变量。
步骤 6:掌握优先级与预设管理
- 优先级:数值越小越先执行,默认值 100。多条规则同时命中同一段文字时,先跑的那条结果会成为后跑规则的输入。
- 多级预设:规则按「预设」分组,可以为「通用清洗」「赛博朋克 UI」「安科风格」等场景各建一套。切换场景时整组切换,不用逐条开关。
- 导入导出:支持 AIO 原生 JSON,也支持直接导入 SillyTavern 正则预设文件——跨宿主迁移时这一点很关键。
- 三层作用域(Foreverse 教程归纳):全局正则 → 卡自带正则(跟卡走)→ 会话层正则(本次聊天专属合并)。排障时按「全局 / 这张卡 / 这次会话」三层加一眼「作用位置」基本能锁定来源。
步骤 7:区分正则与脚本的适用场景
很多「正则写不出效果」的问题,根源其实是工具选错。对照下表判断:
| 你想完成的事 | 推荐工具 | 原因 |
|---|---|---|
| 匹配、隐藏、提取、清理、简单替换 | 正则 | 纯文本处理,正则最短路径 |
| 判别、变量、持久化、异步请求、监听 | 酒馆助手脚本 | 需要程序逻辑与生命周期 |
文本变交互(如 <choice> 变可点击按钮) | 正则 + 脚本 | 正则先出结构,脚本再绑定事件 |
| 从已有变量渲染面板 | 脚本 | 数据已在变量里,不必再让模型重抄 |
TavernWeave 教程给出的口诀是:「找出来、藏起来、换个样子 → 正则;点了以后做事、数据变化后刷新、失败后反馈 → 脚本;模型输出要变成可交互界面 → 正则 + 脚本」。这条口诀只是入门判断,结构化 JSON 也可以直接交给脚本解析,不必为了省几行代码强行塞给正则。
另一个重要原则:显示层和真实数据要分层。例如变量卡要求模型输出 <UpdateVariable>...</UpdateVariable> 供变量系统解析,你可以用「仅显示」正则把它对玩家隐藏——但不能使用「双向」在写盘前删掉,否则页面干净了,变量却不再更新。这一点在小酒窝教程和 TavernWeave 教程中都被反复强调。
常见问题排查
先按「现象」反查「常见原因」,再决定改哪一层:
| 现象 | 常见原因 |
|---|---|
| 页面看得到,但按钮点不动 | 正则只生成了 HTML,没有脚本绑定点击事件 |
| 按钮第一次有效,刷新后失效 | 只在首次加载时绑定,未重新处理渲染 |
| 点击一次执行多次 | 监听器重复注册,或缺少执行锁 |
| 状态栏一直显示旧数据 | 只初始化读取一次,未监听变量变化 |
| 正则把正文也隐藏了 | 匹配范围过大或边界不明确 |
| 变量更新突然失效 | 正则破坏了更新块,或执行顺序不对 |
| UI 变了,刷新后恢复 | 只改了 DOM,没写回真实状态 |
| 变量已变化,UI 没变 | 写入成功,但没有重新读取与渲染 |
另一类高频卡点是**「明明改好了,模型下一轮却按旧文本继续」**——这多半是因为规则处于「仅显示」档,屏幕看着改了,模型根本没收到。检查该条规则卡片上的「执行时机」标签即可。
还有一条经验:如果一条正则越写越长、不断增加分支,先回头统一输入格式(让模型用固定标签包裹),而不是继续在正则里堆条件。
FAQ
Q:酒馆正则和 SillyTavern 正则是同一个东西吗?
A:语义基本一致。SillyTavern 是官方桌面宿主,AIO Hub、各移动端酒馆也沿用同一套「作用位置 + 执行时机 + $1/{{match}} 引用 + 深度范围」的约定。文件层面,AIO Hub 自带原生 JSON 与 SillyTavern 预设两种导入导出,可以直接互换。
Q:导入带正则的角色卡,会不会乱改我的聊天记录? A:美化类规则通常走「仅显示」,只替换渲染层,聊天文件里存的仍是模型原话,HTML 模板也不占 token。会永久改动记录的是「双向」档——替换发生在写盘之前,没有撤销键。在全局正则页扫一眼每条规则的时机标签,就能知道谁会动记录。
Q:正则写坏了会把聊天弄崩吗? A:不至于崩。最坏情况是显示被替换成空,渲染侧通常有兜底会回退显示原文,不会白屏,也不会吞协议正文。修复路径是回管理页把嫌疑规则关掉——「仅显示」档的错误不碰记录,关掉即恢复。真正要小心的是「双向」档。
Q:深度设成 4 是什么意思?为什么 96 楼的状态栏没了、100 楼的还在? A:这是小酒窝教程示范过的典型场景。当「最小深度 = 4」时,规则只在第 4 楼及更早生效(即倒数第 5 层往前),最近 4 层被保留。如果你的聊天当前最后一层是 100 楼,那么 96 楼被清、97–100 楼保留——这就是「不发送 4 楼外状态栏」的实际表现。
Q:$1、$2 和 {{match}} 有什么区别?
A:$1、$2 是正则捕获组的反向引用(对应模式中第几个括号分组),{{match}} 引用整个命中片段。二者常与宏 {{user}}、{{char}} 组合使用。
Q:正则和酒馆助手脚本到底该用哪个? A:看你要完成的事。只做文本匹配、隐藏、替换、清理 → 正则;需要判别、变量、持久化、异步请求、UI 事件 → 脚本;「文本变可交互界面」需要两者配合。参见上文对比表。
Q:从别人那里拿到的正则 JSON,怎么确认它安全?
A:先看内容——导入前用纯文本打开 JSON,确认没有 script 字段或可疑的 JS 片段;宿主在导入带脚本能力的规则时通常会做风险扫描,看到警告不要跳过。宁可先只开「仅显示」档试跑,确认无误再切换到「双向」。
Q:能一键导出「读者视角」看到的效果吗? A:可以。⋮ 菜单的高级区通常有「导出可读文本(正则后)」,导出的就是替换后的显示态,比截图分享更方便。部分教程提到的网页版酒馆正则测试器也能离线做替换前后对照。
Q:为什么我看别人分享的正则规则编号和预设对不上? A:不同的预设包会自带自己的优先级编号体系(默认 100 起步),模块化预设(如 GrayWill-ST)还要求「隐藏攻击正则 + 酒馆助手脚本」配套安装才能正常跑 meta 功能。逐条按名称或查找串搜索,比按编号硬对更可靠。
CTA
想要一份能直接跑起来、涵盖思考链折叠 / OOC 清理 / 状态栏美化的正则预设作为对照参考,可以先到 tuniang.ai 看看;上面的模板都可以单独关掉、逐条拆解,不影响你已经调好的规则。