如何编写Regex匹配Obsidian中指定Markdown标题下的任务
匹配Obsidian中指定标题下任务项的正则方案
要只抓取# Now标题下的所有带复选框的任务(包括子项),可以基于你现有的任务匹配正则,加上范围限定逻辑,最终正则如下:
(?<=^# Now\n)(?:(?!^# ).*\n)*?^[ \t]*(-|\*|\d*\.) \[[xX ]\].*$
关键逻辑拆解
- 范围锁定:
(?<=^# Now\n)是正向后顾断言,确保匹配内容紧跟在# Now标题行之后;(?!^# ).*\n是负向前瞻,确保不会匹配到下一个一级标题(以#开头的行),把匹配范围严格限定在# Now到下一个一级标题之间 - 任务识别:最后的
^[ \t]*(-|\*|\d*\.) \[[xX ]\].*$就是你原本的任务行匹配规则,负责识别带复选框的任务项 - 惰性匹配:
*?确保正则不会过度扩展匹配范围,避免跨标题抓取内容
注意事项
- 需开启多行模式(Obsidian的正则引擎默认支持该模式,
^和$会匹配每行的首尾) - 子任务会被自动包含,因为正则会覆盖
# Now下所有非一级标题的内容,再从中筛选任务行
内容的提问来源于stack exchange,提问作者derekvan
相关产品推荐
相关产品推荐

