切换主题
正则美化
正则美化允许你配置多条匹配规则和替换内容。
它的作用,是把开场白或 AI 回复里的特定文本替换成 HTML 和 CSS,让原本普通的文本显示成更完整的 UI。
提示
- 如果你只是想先做出效果,不打算手写正则,可以在平台里搜索“正则助手”。
- 如果你是新建角色卡,而不是兼容旧内容,优先使用 JSON 美化。
适用场景
- 格式化角色开场白,补上样式和布局
- 美化 AI 回复内容,增强视觉效果
- 移除特定文本,例如
<think>...</think> - 统一消息格式,让输出更整齐
示例
比如让 AI 输出:
text
<status>
时间:第 3 天 / 夜晚
地点:中央医院
天气:降雪
</status>然后再把它替换成一个状态卡片,而不是让 AI 直接生成整套卡片结构。
这样做有几个直接好处:
- 更省 Token:AI 不需要每次都输出复杂标签和样式
- 更容易控格式:模型只需要维持一段相对稳定的文本
- 更方便改样式:多数时候只改正则脚本,不用反复改提示词
提示
一条正则脚本,可以先简单理解成两部分:
- 查找正则:我要找什么
- 替换内容:找到之后,换成什么
字段说明
脚本状态
脚本开关:它很适合做临时测试。比如你怀疑某一条脚本导致样式异常,可以先关掉,而不是直接删掉。
脚本名称
脚本名称只给你自己看,建议直接写用途,例如:
状态栏对话高亮去除 think 标签
查找正则
查找正则,就是匹配目标文本的规则。
你可以直接写普通模式,也可以写带标志位的形式,比如:
abc/abc/g/abc/gi
如果你暂时不熟悉正则,先记住一条最实用的经验:
先让 AI 输出一个稳定的包裹标记,再整块去找。
示例
AI 输出:
text
<status>
时间:夜晚
天气:降雪
</status>那你可以这样找它:
text
/<status>([\s\S]+?)<\/status>/g这条写法里,最值得先看懂的是两部分:
<status> ... </status>:表示只处理被这对标签包住的内容([\s\S]+?):表示把中间内容抓出来,并作为第 1 个捕获组
提示
新手起步时,更稳的方式不是上来写很复杂的正则,而是:
- 先约定一对固定标记,比如
<status>...</status> - 再整块匹配
- 最后替换成 HTML
关于 g 和多行匹配
这是两个特别容易踩的坑:
- 要替换多处时,记得加
g - 要匹配跨行内容时,优先用
[\s\S]+?
示例
- 只替换第一处:
/<status>(.+?)<\/status>/ - 替换全部:
/<status>([\s\S]+?)<\/status>/g
WARNING
. 默认不匹配换行。
所以只要你的内容可能跨行,就不要太依赖 .+?,直接换成 [\s\S]+? 通常更稳。
替换内容
替换内容就是“找到之后,最终要显示成什么”。
这里支持:
- 常规 HTML 标签
<style>样式块- 捕获组引用
- 部分变量替换
能不能直接写 HTML 和 CSS?
可以,而且这正是它的主要用途之一。
你不需要写完整网页结构,不必写这些:
<!DOCTYPE html><html><head><body>
通常直接写:
<style>...</style><div>...</div><span>...</span>
就够了。
如果你还想补点击、切换、表单等轻量交互,可以继续配合 标签交互指令。
WARNING
<script>、<iframe>、<object> 这类危险标签不要用。
即便写进去,也会被安全清洗或过滤,不会按你预期的方式执行。
去除字符串
这个字段的作用是:
在把捕获组内容塞进替换模板前,先把某些固定字样删掉。
多个字符串请用 英文逗号 分隔。
示例
原文:
text
<status>【状态】夜晚 / 降雪</status>查找正则:
text
/<status>([\s\S]+?)<\/status>/g去除字符串:
text
【状态】替换内容:
html
<div class="status-box">$1</div>最终页面里,$1 就不会再带 【状态】 这几个字符。
提示
如果正则本身已经能精准排除无用文字,就尽量别再靠“去除字符串”补救。
它更适合做轻量清理,不适合拿大块脏数据硬修。
状态栏示例
如果你是第一次上手,最适合从“状态栏”开始。
第一步:让 AI 输出稳定标记
比如约定 AI 在需要展示状态时,输出:
text
<status>
<时间>当前剧情中时间的具体描述</时间>
<地点>当前剧情中地点的具体描述</地点>
<天气>当前剧情中天气的具体描述</天气>
</status>第二步:写查找正则
text
/<status>[\s\S]*?<时间>([\s\S]*?)<\/时间>[\s\S]*?<地点>([\s\S]*?)<\/地点>[\s\S]*?<天气>([\s\S]*?)<\/天气>[\s\S]*?<\/status>/g第三步:写替换内容
html
<style>
.status-container {}
.status-header {}
</style>
<div class="status-container">
<div class="status-header">当前状态</div>
<div class="status-item">
<div class="status-label">时间</div>
<div class="status-value">$1</div>
</div>
<div class="status-item">
<div class="status-label">地点</div>
<div class="status-value">$2</div>
</div>
<div class="status-item">
<div class="status-label">天气</div>
<div class="status-value">$3</div>
</div>
</div>这样,AI 还是只需要输出那段简洁文本,但前端看到的会是一张状态卡片。
多个正则脚本顺序如何执行?
正则脚本是 按列表顺序一条一条执行 的。
也就是说:
- 后面的脚本,看到的是前面脚本已经处理过的内容
- 如果多个脚本命中同一段文本,后面的结果可能覆盖前面的结果
这也是为什么列表支持拖拽排序。
WARNING
最常见的两个顺序问题:
- 两条脚本查找的是同一类内容,后者把前者结果又改了一遍
- 前一条已经把原始标记换掉了,后一条再也匹配不到原文
如果你发现“这条脚本明明没写错,但就是不生效”,先看顺序,再看正则本身。
写 CSS 时要注意什么?
平台对正则产生的样式,做了几层保护和限制。
1. 样式作用域
正则替换出来的 <style>,会被提取到当前消息的 Shadow DOM 样式表中。
简单理解,它主要影响当前这条消息。
2. 类名规范
虽然样式作用域已经限制住了,但同一条消息里如果多条脚本用了相同类名,样式还是会叠加或覆盖。
比如不要多条脚本都写:
css
.main { ... }
.title { ... }更稳的写法是带用途前缀:
css
.status-box { ... }
.status-box-title { ... }3. 灾难性回溯
当你的正则里写了太多模糊的嵌套量词,比如 (a+)+,一旦遇到匹配失败的字符串,正则引擎就可能“钻牛角尖”。
它会反复尝试大量组合路径,导致 CPU 瞬间拉满,程序直接卡死。
如何避免
- 少用嵌套量词:不要写类似
(.*)*这种层层叠加的匹配 - 尽量明确边界:能写具体范围时,就别全部交给
.* - 优先用非贪婪模式:多使用
[\s\S]*?,找到目标就及时停止
可以和 JSON 美化一起用吗?
可以。如果一条消息同时用了 JSON 美化和正则美化:
- JSON 先执行
- 正则后执行
这意味着正则看到的,是 JSON 模板处理过之后的内容。
提示
建议两者各司其职,不要混着处理同一段内容。
原因在于遇到问题时,可能不是正则写坏了,而是 JSON 已经先改过一次。
起步建议
如果你从来没写过正则,不要一上来做复杂页面。
先按下面这套最小流程来:
- 先让 AI 输出一对稳定标签,比如
<status>...</status> - 用一条正则把整块抓出来
- 用最简单的
<style> + <div>包一层 - 在右侧预览里反复看效果
- 脚本保存后,再保存整个角色卡
你先把这一条跑通,再去做第二条、第三条,会比一开始就堆很多脚本稳得多。