正規表現スクリプト

正規表現スクリプトとは、チャットの文章を自動で書き換える検索と置換のルールです。AIの返信を整える、自分のメッセージの形を変える、モデルが受け取る文章を変える、といった用途に使います。使うのにプログラミングの知識は要りません。

regexは「regular expression」(正規表現)の略で、ルールに一致する文章を見つける検索のパターンです。パターンは一度設定すれば、一致するすべてのメッセージで動きます。

例: モデルによっては、動作をアスタリスクで囲みます。

*She smiles* Hello there.

パターン\([^]+)\*を、正確にそのままコピーしてください。これを$1に置き換えると、アスタリスクが消え、中の文章は残ります。

She smiles Hello there.

$1は「1つ目の丸括弧が捉えた文字列」という意味です。ほかによくある使い道は、丸括弧で書かれたキャラクター外の注記の削除、特定の語の伏せ字化、あるキャラクターの書式の癖の修正です。

正規表現スクリプトを作る

全体で使うスクリプトは、Presets(プリセット)パネルのRegexes(正規表現)セクションにあります。上部バーのPresetsボタンから開きます。

正規表現スクリプトの作成

  1. Presetsを開き、Regexesを探します。
  2. Create regex(正規表現の作成)をクリックします。編集画面が開きます。
  3. 上部に名前を入力します。新しいスクリプトの名前は「New Regex Script」です。
  4. Find Pattern (Regex)(検索パターン)に\([^]+)\*と入力します(編集画面の項目を参照)。
  5. Replace With(置換後の文字列)に$1と入力します。
  6. Apply To(適用先)では、AI Outputを選んだままにします。デフォルトの適用範囲であるOnly Displayが安全な選択です(スクリプトが動く場所を選ぶを参照)。
  7. Live Test(動作テスト)にShe smiles Hello there.を貼り付けます。Result:にはShe smiles Hello there.と表示されるはずです。
  8. Save(保存)をクリックします。緑色のSavedの表示が少しの間現れます。
  9. チャットで確認します。AIの返信にアスタリスクで囲まれた文章があっても、アスタリスクは表示されなくなります。

うまくいかなかった場合: Find Pattern (Regex)の下に赤いエラーが出ていると、保存できません。パターンが不正か、安全ではありません。安全性とパフォーマンスを参照してください。

スクリプトの管理

Regexesの一覧の各行には、スクリプトの名前、AIまたはUserのタグ、/pattern/flagsの形式のパターン、オン/オフのトグル(すぐに反映されます)、Edit regex(正規表現の編集、鉛筆アイコン)、Delete regex(正規表現の削除、ゴミ箱アイコン)が並びます。スクリプトが1つもないときは「No regexes yet」と表示されます。行のハンドルをドラッグすると、実行順を変えられます。

セクションの見出しには、Create regex、Import regexes from JSON(JSONから正規表現をインポート)、Export regexes to JSON(JSONへ正規表現をエクスポート、全体で使うスクリプトをすべて1つのファイルに保存)の3つのアイコンボタンがあります。1人のキャラクターに結び付いたスクリプトは、別に管理します。スクリプトを1人のキャラクターに限定するを参照してください。

編集画面の項目

Find Pattern (Regex)

検索に使うパターンです。パターンだけを書き、先頭や末尾にスラッシュは付けません。プレースホルダーには、例として\([^]+)\*が表示されます。

Replace With

一致した箇所と入れ替わる文字列です。空のままにすると、一致した箇所を削除します。$1、$2などで、捉えた文字列を再利用できます。捉えた文字列の前に次の記号を置くと、文字の大小を変えられます。

書き方結果
\u$1捉えた文字列の先頭を大文字にします。
\U$1\E捉えた文字列全体を大文字にします。
\l$1捉えた文字列の先頭を小文字にします。
\L$1\E捉えた文字列全体を小文字にします。

C:\UsersのようなWindowsのパスなど、バックスラッシュをそのまま含む文字列は書いたとおりに残ります。

Regex Flags

パターンの一致のしかたを変えるトグルボタンです。新しいスクリプトではgとiがオンになっています。

フラグ意味
gGlobal: 最初の1件だけでなく、一致したすべての箇所を置き換えます。
iCase-insensitive: 大文字と小文字を区別しません。
mMultiline: ^と$が改行位置にも一致します。
sdotAll: .が改行文字にも一致します。
u、y、dUnicode、sticky、match indices。特殊な用途向けです。

Trim Strings

置換のあとに取り除く単純な文字列を並べる、任意の一覧です。Add trim string(削除する文字列を追加)をクリックすると行が増え、Xボタンで行を削除できます。パターンで一致させるより直接入力したほうが簡単な、決まった文字列に使います。

Live Test

サンプルの文章を貼り付けると、Result:の下に結果が表示されます。Live Testで確認できるのは、検索、置換、削除の処理だけです。適用先、オン/オフの状態、キャラクターの範囲、深さは、実際のチャットで評価されます。パターン、置換後の文字列、削除する文字列には、{{user}}や{{char}}などのマクロを使えます。Live Testでは、マクロはサンプルの値になります。マクロを参照してください。

スクリプトが動く場所を選ぶ

Apply To

Apply To(適用先)は、スクリプトがチャットのどちら側を対象にするかを決めます。少なくとも1つは選んだままにしてください。両方を選ぶこともできます。

Apply Mode

Apply Mode(適用範囲)はAdvanced Options(詳細設定)の中にあります。書き換えによって何が変わるかを決めます。新しいスクリプトではOnly Displayが選ばれています。

自分のメッセージの場合、User InputのスクリプトをOnly DisplayまたはBothに設定すると、メッセージは送信される直前に書き換えられます。見た目だけでなく、保存されて送信されるメッセージそのものが変わります。送信するメッセージには、表示だけを変えるモードはありません。

Execution OrderとDepth Range

どちらもAdvanced Optionsの中にあります。

グループチャット

これは、Individual(個別)のグループモードを使うRoleplayチャットで、Only PromptとBothに当てはまります。

スクリプトを1人のキャラクターに限定する

スクリプトは、どこでも動かすのではなく、特定のキャラクターに結び付けられます。方法は2つあります。

このカードから編集画面を開くと、Character Editorから離れます。キャラクターに未保存の変更がある場合は、アプリが先に警告します。

チャットごとのScoped Regex Scripts設定

キャラクター単位のスクリプトは、それだけですべてのチャットで動くわけではありません。チャットごとの設定で制御します。Chat Settings(チャット設定)を開いてください。Scoped Regex Scripts(範囲限定の正規表現スクリプト)セクションは、そのチャットのキャラクターの少なくとも1人が範囲を限定したスクリプトを持つときにだけ表示されます。

モード動作
Disabled(デフォルト)範囲を限定したスクリプトはオフです。全体で使うスクリプトだけが動きます。
Exclusive範囲を限定した各スクリプトは、自分のキャラクターのメッセージだけを書き換えます。
Chat範囲を限定したすべてのスクリプトが、チャット内のすべてのメッセージを書き換えます。

Use preset default(プリセットのデフォルトを使用)は、プロンプトプリセットのScoped regex default(範囲限定の正規表現のデフォルト)に従います。モードを選ぶと、このチャットではそのモードが優先されます。新しいチャットを特定のモードで始めるには、次のいずれかを使います。

モードの下には、範囲を限定したスクリプトがキャラクターごとに並び、スクリプトごとにスイッチがあります。このスイッチはスクリプト自体のものなので、切り替えるとすべてのチャットでそのスクリプトが変わります。モードが制御するのは表示側のスクリプトです。プロンプト側のスクリプトは、返信を生成しているキャラクターに常に従います。

スクリプトのインポートと入れ替え

SillyTavernからのインポート

Marinaraは、SillyTavernのキャラクターカードに同梱された正規表現スクリプトを読み込みます。カードをインポートすると、Imported regex scripts(インポートした正規表現スクリプト)セクションに2つの選択肢が表示されます。

この選択は、キャラクターを1人ずつ取り込むウィンドウと、Import from SillyTavern Folderによる一括インポートで表示されます。パターンが空のスクリプトや、安全性チェックに通らないパターンのスクリプトは飛ばされます。スクリプトだけの単純なJSONファイルをインポートするには、RegexesのImport regexes from JSONを使います。SillyTavernからのインポートを参照してください。

Regexパックの入れ替え

  1. Presets → Regexes(プリセット → 正規表現)で、Select regex scripts(Regexスクリプトを選択)を選びます。
  2. 古いパックの項目にチェックを入れるか、Select all regex scripts(すべてのRegexスクリプトを選択)を選びます。
  3. 操作バーのExport(エクスポート)またはDelete(削除)を使います。削除は一度だけ確認され、取り消せません。
  4. 更新版のパックをインポートします。

削除に失敗した項目は、再試行できるよう選択されたままになります。未選択のスクリプトはそのまま残ります。プリセットへの割り当ては、引き続き正規表現の編集画面で行えます。

安全性とパフォーマンス

すべてのパターンは、保存や実行の前に検査されます。処理が遅くなってアプリが固まる可能性の高いパターンは、次のメッセージとともに拒否され、修正するまで保存できません。

Regex pattern is unsafe: avoid nested quantifiers, ambiguous quantified alternatives, and oversized patterns.

このメッセージが表示された場合は、パターンを短く、単純にしてください。次のような形を避けます。

a+や(a+)のような単純な繰り返しや、.*を1つだけ使うような、範囲の広いワイルドカード1つは問題ありません。

安全なパターンでも、長いメッセージでは置換1回ごとに制限時間があります。あるスクリプトが1件のメッセージで時間がかかりすぎた場合、アプリはそのメッセージについてだけそのスクリプトを飛ばします。スクリプトはオンのままで、次のメッセージで再び実行されます。新しいパターンは、まず短いサンプル文章を使ってLive Testで試してください。

関連ガイド