Obsidian场景:正则匹配含[[Wikilink]]的Markdown标题下层级内容
解决Obsidian中匹配含[[Wikilink]]标题下内容的正则问题
需求说明
- 匹配标题中包含
[[Wikilink]]的任意层级Markdown标题(H1-Hn) - 捕获该标题下方所有内容,直到遇到同级或更高层级标题,或文件结尾
- 需适配不同层级的标题,兼容格式不一致的文件
现有正则问题分析
你当前使用的正则:
(^#+ )[\[]*?\[\[Wikilink]\][^\n]*?\n([\S\s]*?)(?1)
问题在于(?1)会严格匹配和开头完全相同的标题前缀(比如开头是## ,就只会匹配## ),但实际需要匹配同级或更高层级的标题(即#数量小于等于开头的标题),所以遇到其他层级标题时会匹配失败。
修正后的正则表达式
^(#+) .*?\[\[Wikilink]\][^\n]*\n([\s\S]*?)(?=^\1 |^\#+(?<!\1) |\Z)
正则解释
^(#+):捕获标题的层级(连续的#),并匹配标题开头的空格.*?\[\[Wikilink]\][^\n]*\n:匹配包含[[Wikilink]]的标题内容,直到换行([\s\S]*?):非贪婪捕获标题下的所有内容(包括子标题、文本、空行等)(?=^\1 |^\#+(?<!\1) |\Z):正向预查终止条件,满足任一即停止:^\1:遇到和当前标题同级的标题(完全匹配捕获的#数量)^\#+(?<!\1):遇到更高层级的标题(#数量少于捕获的数量)\Z:文件结尾
适配Obsidian的注意事项
- 确保开启正则的多行模式(
m修饰符),让^和$匹配每行的开头/结尾 - 如果需要匹配多个符合条件的标题块,添加全局模式(
g修饰符)
内容的提问来源于stack exchange,提问作者Nicolas LIENART
相关产品推荐
相关产品推荐

