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

JavaScript正则替换需求:为Anki闪卡添加结束标记

解决Anki闪卡自动添加结束标记的正则替换问题

需求说明

需要实现JavaScript正则替换逻辑,完成以下操作:

  • 为所有未添加<!-- end of flashcard -->标记的Anki格式闪卡自动补上该标记
  • 若闪卡内容后紧跟以^开头的行,保留该行在结束标记上方后再添加结束标记
  • 已存在结束标记的闪卡不做修改
  • 开启多行模式,支持全局多次替换

现有尝试问题

之前编写的正则未正确匹配以^开头的行,且未排除已存在结束标记的闪卡,导致无法实现预期效果:

(?:\&gt; \[!anki\]-) ([^\n]+)\n(.+(?:\n(?:^.{1,3}$|^.{4}(?&lt;!&lt;!--).*))*)

替换模板:

(?:\&gt; \[!anki\]-) ([^\n]+)\n(.+(?:\n(?:^.{1,3}$|^.{4}(?&lt;!&lt;!--).*))*)(\n&lt;!-- end of flashcard --&gt;|\n)

修正后的解决方案

正则表达式(开启gm模式)

/^> \[!anki\]- ([^\n]+)\n((?:(?:> .*|^\^.*)\n?)*)(?!<!-- end of flashcard -->)/gm

替换字符串

`> [!anki]- $1\n$2<!-- end of flashcard -->\n`

正则逻辑解释

  1. 标题匹配:^> \[!anki\]- ([^\n]+) 匹配闪卡的标题行,捕获标题内容到分组$1
  2. 内容捕获:((?:(?:> .*|^\^.*)\n?)*) 捕获闪卡的所有内容行,包括:
    • 以> 开头的常规闪卡内容行
    • 以^开头的特殊标记行
    • 每行末尾的换行符
  3. 排除已标记闪卡:(?!<!-- end of flashcard -->) 负向预查,确保当前位置后没有结束标记,避免重复处理

示例验证

输入

&gt; [!anki]- Title
&gt; Answer

&gt; [!anki]- Title
&gt; Answer
&lt;!-- end of flashcard --&gt;

&gt; [!anki]- Title
&gt; Answer
&gt; Another line
&gt; Another line

&gt; [!anki]- Title
&gt; Answer
^7a6a36

输出

&gt; [!anki]- Title
&gt; Answer
&lt;!-- end of flashcard --&gt;


&gt; [!anki]- Title
&gt; Answer
&lt;!-- end of flashcard --&gt;


&gt; [!anki]- Title
&gt; Answer
&gt; Another line
&gt; Another line
&lt;!-- end of flashcard --&gt;


&gt; [!anki]- Title
&gt; Answer
^7a6a36
&lt;!-- end of flashcard --&gt;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:04:53