Atomic Calendar Revive titleReplace 功能实战:用正则一键美化混乱的共享日历标题

【免费下载链接】atomic-calendar-revive

An advanced calendar card for Home Assistant Lovelace.

项目地址: https://gitcode.com/gh_mirrors/at/atomic-calendar-revive
点击查看 免费下载

Atomic Calendar Revive 是 Home Assistant Lovelace 中一款进阶日历卡片(advanced calendar card)。当多个人共用一个家庭日历时,事件标题往往混着人名前缀、语言标记等杂质(比如 "Daddy 超市购物"、"STEVE hat Geburtstag"),看起来杂乱无章。卡片提供的 titleReplace 选项允许你按实体配置一组正则替换规则,一键美化显示标题——只改展示,不污染原始事件数据。本文带你快速掌握它的用法、配置细节和避坑要点。

Atomic Calendar Revive 事件模式下的日历卡片,titleReplace 美化后事件标题整齐显示

为什么需要 titleReplace?

家庭场景下很常见的情况:一个 calendar.family 实体里混着所有人的日程,标题自带各种标记:

  • Daddy 超市购物 / Mummy 家长会 —— 人名前缀
  • STEVE hat Geburtstag —— 德语"过生日"标记
  • Dinner = Sushi —— 前缀标签式命名

allowlist / blocklist 可以过滤事件,但没法改写标题。而 titleReplace 正是为改写而生:按 {from, to} 规则列表,对显示标题逐个执行正则替换,from 是不区分大小写的正则,to 是替换内容(留空即删除匹配部分)。

30 秒上手:基础配置

titleReplace 是按实体配置的选项,写在 entities 列表对应条目下:

type: custom:atomic-calendar-revive
entities:
  - entity: calendar.family
    allowlist: '^Dinner = '
    titleReplace:
      - from: '^Dinner = '
        to: ''

效果:原始标题 Dinner = Sushi 在卡片上只显示为 Sushi。完整的实体级选项说明(含默认值表格)见官方文档 docs/configuration/entity.rst。

实战技巧:正则规则怎么写更稳

下面几个技巧能让规则更精准,避免误伤:

  • 用 ^ 锁定开头、$ 锁定结尾:^Daddy 只删开头的人名前缀,标题中间恰好出现的 "daddy" 不会被动
  • to 留空 = 纯删除:最常见的"去前缀/去后缀"场景,to 填 '' 即可
  • 多条规则按顺序执行:前一条规则的输出会作为后一条的输入,可链式清理
  • 大小写不敏感:STEVE hat Geburtstag 与 steve hat geburtstag 会被同一条规则命中,无需写 (?i)
  • 全局替换:规则按全局正则编译,同一标题中多次出现的匹配都会被替换

多规则示例(摘自官方文档)——去掉人名前缀并清理德语后缀:

entities:
  - entity: calendar.daddy
    name: Daddy
    titleReplace:
      - from: '^Daddy '
        to: ''
      - from: ' hat Geburtstag$'
        to: ''

也可以在月视图(Calendar 模式)中检查标题展示效果:

Atomic Calendar Revive 日历月视图,事件以圆点与标题显示

进阶要点:titleReplace 与过滤规则配合

一个容易被忽略的细节:过滤规则(allowlist / blocklist)始终匹配替换前的原始标题(rawTitle),而卡片展示的是替换后的标题。源码中对此有明确注释,见 src/lib/event.class.ts。

这意味着:

  • 你可以先按原始标题过滤(allowlist: '^Dinner = '),再删掉同一个前缀用于展示,两者互不干扰
  • 若某事件只有被 titleReplace 删掉的标记(替换后标题为空),用 blocklist 依然能按原始标题把它过滤掉

核心替换逻辑 applyTitleReplace 位于 src/lib/event.class.ts,行为要点:

场景行为
未配置规则 / 空列表标题原样返回
from 为非法正则该条规则被静默跳过,其余规则继续生效,不会导致卡片报错
多条规则按数组顺序依次执行,最后 trim() 收尾

配置校验:写错会怎样

配置加载时,titleReplace 会经过严格校验(实现见 src/lib/config-validator.ts):

  • 必须是数组,否则报错:entities[0].titleReplace must be an array of {from, to} entries
  • 每个条目必须是含 from 字段的对象,from 为字符串且须为合法正则,to 可选但必须是字符串
  • 报错信息会精确到条目下标,如 entities[0].titleReplace[0].from must be a string regex pattern,方便定位

相关测试用例可参考 src/tests/event.class.test.ts 与 src/tests/config-validator.test.ts,其中覆盖了顺序执行、大小写不敏感、非法正则跳过等行为。

常见场景速查表

目标规则示例效果
去固定前缀{ from: '^Daddy ', to: '' }Daddy 超市 → 超市
去固定后缀{ from: ' hat Geburtstag$', to: '' }STEVE hat Geburtstag → STEVE
整体重命名{ from: 'Daddy Work', to: 'Work' }Daddy Work → Work
链式替换先 { from: '^Birthday ', to: '' } 再 { from: 'Grandpa', to: 'Opa' }Birthday Grandpa → Opa

💡 提示:不建议对同一实体同时使用 allowlist 和 blocklist(官方文档明确提示),需要精细控制时优先用 titleReplace + 单一白名单组合。

小结

titleReplace 是 Atomic Calendar Revive 中成本极低、收益很高的一项配置:

  1. 展示与数据分离——只美化显示标题,allowlist/blocklist 仍能匹配原始标题
  2. 规则容错——非法正则会跳过而非炸掉整张卡片
  3. 顺序可控——多条规则链式执行,可覆盖前缀、后缀、重命名等全部常见美化需求

按本文的配置方式改造后,你的家庭共享日历就能在 Home Assistant 大屏上呈现干净、统一的标题了。更多实体级选项(图标、时间过滤、字体等)请查阅 docs/configuration/entity.rst。

【免费下载链接】atomic-calendar-revive

An advanced calendar card for Home Assistant Lovelace.

项目地址: https://gitcode.com/gh_mirrors/at/atomic-calendar-revive
点击查看 免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值