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

Obsidian转Anki插件正则表达式功能解析及优化需求

正则表达式功能逻辑解析

这是Obsidian转Anki插件中用于匹配「Markdown标题+对应内容块」的正则,完整表达式如下:

^#+(.+)\n*((?:\n(?:^[^\n#].{0,2}$|^[^\n#].{3}(?<!<!--).*))+)

逐段拆解逻辑

1. 标题匹配段:^#+(.+)

  • ^:锚定到文本行开头,确保只匹配行首的#号(避免误将段落中的#号识别为标题)
  • #+:匹配1到6个#号,对应Markdown的1-6级标题
  • (.+):捕获#号后的标题文本,+保证标题至少包含一个有效字符,排除空标题

2. 标题后空白处理:\n*

匹配标题行结束后0个或多个换行符,允许标题与内容之间存在空白间隔。

3. 内容捕获段:((?:\n(?:^[^\n#].{0,2}$|^[^\n#].{3}(?<!<!--).*))+)

这部分是核心内容匹配逻辑,仅捕获非标题行,通过分支规则过滤特定行:

  • 外层(?:...)为非捕获组,+表示重复匹配多行内容
  • \n:强制每一行内容从新行开始,避免与标题行混淆
  • 内部两个分支用|分隔:
    • 分支1:^[^\n#].{0,2}$:匹配行首不是#、内容长度≤2的行(比如短符号行、仅含空格的行)
    • 分支2:^[^\n#].{3}(?<!<!--).*:匹配行首不是#、内容长度≥3的行,同时通过(?<!<!--)负向后断言排除以<!--开头的注释行

关键问题说明

  • 空行停止捕获的原因:空行结构为^$,不满足两个分支的^[^\n#]条件(行首无非#/非换行的字符),正则会判定内容块到此结束,停止捕获。
  • 移除\n破坏嵌套标题识别的原因:\n是分隔标题行与内容行的关键锚点,移除后正则无法区分当前内容与下一个标题行(下一个标题的#号会被纳入内容匹配分支),导致嵌套标题被误判为当前标题的内容,无法正确分割不同标题块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:35:05