You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ICU正则捕获Obsidian YAML前置元数据中的所有标签?

问题分析与解决

先逐个拆解你现有正则的问题:

  1. 正则 \s*?-\s([_/\w]*)\n
    这个正则没有限定匹配上下文,只要是YAML里以缩进+- 开头的列表项都会被命中——不管这个列表属于tags:还是其他属性(比如categories:下的列表),所以会捕获所有数组项,而非仅tags:下的标签。

  2. 正则 (?<=tags:\n)\s*?-\s([_/\w]*)\n(?=[^\s])
    两个核心问题:

    • 正向断言(?=[^\s])要求标签行后必须跟着非空白字符,但tags:下的后续标签行开头是缩进空格,不满足该条件,因此只能匹配第一个标签,后面的标签会被过滤。
    • 未考虑YAML结束符---的场景:如果tags:是YAML最后一个属性,后面直接是---,这个断言无法匹配,导致正则失效。
  3. 正则 (?<=^tags:\n)(.*?)(?=\n[^\s])
    它捕获的是tags:行到下一个顶格行之间的整个文本块,而非单个标签内容,自然会包含每个标签前的缩进、-和空格这些多余格式符号;同时也存在无法识别---结束场景的问题。

可行的ICU正则方案

针对Siri Shortcuts的ICU正则,你可以用这个全局匹配的正则精准捕获tags:下的所有标签文本:

(?m)(?<=^tags:\s*\n)(?:^\s*-\s)([_\w/]+)(?=\n|^---$)

规则说明:

  • (?m):开启多行模式,让^和$匹配每行的开头与结尾。
  • (?<=^tags:\s*\n):正向后顾断言,匹配顶格的tags:行(允许tags:后带任意空格再换行),确保只锁定tags:下的列表。
  • (?:^\s*-\s):匹配标签行的缩进、-和空格,用非捕获组避免捕获这些格式符号。
  • ([_\w/]+):捕获标签文本,支持下划线、字母数字、斜杠格式。
  • (?=\n|^---$):正向前瞻断言,匹配标签行后的换行,或YAML结束符---行,覆盖所有结束场景。

在Siri Shortcuts中开启全局匹配选项,就能一次性捕获所有tags:下的标签。

内容的提问来源于stack exchange,提问作者Calion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:48:25