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

修改Obsidian-to-Anki插件正则以支持含空行的问答并匹配---结束符

Obsidian-to-Anki插件正则适配方案

原正则与疑问

我使用Obsidian-to-Anki插件时,采用了官方提供的正则:

^Q: ((?:.+
)*)
*A: (.+(?:
(?:^.{1,3}$|^.{4}(?<!<!--).*))*)

我对该正则的理解:

  • 问题以行首的Q:开头,捕获Q:后到答案开始前的内容;
  • 答案以行首的A:开头,遇到插件标记AnkiID的HTML注释时停止捕获;
  • 不理解^.{1,3}$的作用:这部分是匹配长度1-3的短行,原作者可能用来兼容短分隔行,但实际会导致代码块内的空行触发截断,这也是当前正则的问题之一。

修改需求

当前正则仅能匹配部分笔记,需要两处调整:

  1. 允许问答内容包含空行(避免代码块内的空行导致内容截断);
  2. 每个问答段以行首的---结尾,答案需捕获到该行之前。

修改后的正则

^Q: ((?:.+\n?)*?)\s*A: ((?:.+\n?)*?)(?=\n---|\Z)

正则说明

  • ^Q::精准匹配行首的问题标记;
  • ((?:.+\n?)*?):非贪婪模式捕获问题内容,\n?允许内容包含空行,*?确保不会过度捕获到答案区域;
  • \s*A::匹配问题结束后到答案开始前的任意空白内容(包括空行);
  • ((?:.+\n?)*?):非贪婪模式捕获答案内容,同样支持空行;
  • (?=\n---|\Z):正向预查终止条件,遇到换行后接---或文本结尾时停止捕获,确保答案截止到问答段的分隔线前。

匹配效果

针对提供的笔记片段,该正则可正确捕获三组完整问答:

  • 第一组:问题为null与undefined的区别?,答案包含文字解释、列表和带空行的代码块;
  • 第二组:问题为使用[[JS Object.assign]]改写以下代码+代码块,答案包含文字说明和改写后的代码;
  • 第三组:问题为全局isNaN()与Number.isNaN()的区别?,答案包含文字解释和对比列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:25:30