酒館正規表示式教程:從入門到實戰的完整指南
酒館正規表示式教程:從入門到實戰的完整指南
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 看看;上面的模板都可以單獨關掉、逐條拆解,不影響你已經調好的規則。