regex 正则表达式匹配markdown标题和嵌套在特定标题下的文本

juud5qan  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(95)

我使用Obsidian(使用ECMAScript)与Obsidian_to_Anki-插件,我有这样的页面结构:

# Heading 1 ⤵
## Heading 1.1
Text of Heading 1.1
Text can span over multiple lines
Even more text
## Heading 1.2 
Text of Heading 1.2
# Heading 2
## Heading 2.1
Text of Heading 2.1
## Heading 2.2
Text of Heading 2.2
# Heading 3 ⤵
## Heading 3.1
Text of Heading 3.1
## Heading 3.2
Text of Heading 3.2
# Heading 4

我需要一个匹配嵌套在# Heading ⤵下的所有## HeadingsText of Headings的RegExp。在这里应该起到一种开关的作用。所有## HeadingsText of headings都应与捕获组匹配。因此,嵌套在# Heading下而没有的内容不应匹配。因此,匹配的文本应为:

## Heading 1.1
Text of Heading 1.1
More text
Even more text
## Heading 1.2
Text of Heading 1.2
## Heading 3.1
Text of Heading 3.1
## Heading 3.2
Text of Heading 3.2

Here's what I came up with regex101。我的问题是,这种方法只匹配了第一个## headings and texts,我找不到解决方案。

kt06eoxx

kt06eoxx1#

您可以使用:用途:

(?<=^# .*⤵(?:\n(?!# ).*)*)\n(^## .*)\n(?!^##? )(.*(?:\n(?!^##? ).*)*)

模式匹配:

  • (?<=正向后看,Assert左边是
  • ^# .*⤵匹配#和以结尾的行的其余部分
  • (?:\n(?!# ).*)*可选匹配所有不以1+ #字符和空格开头的行
  • \n匹配换行符
  • )关闭lookbehind
  • (^## .*)捕获组1,匹配##,然后是该行的其余部分
  • \n匹配换行符
  • (?!^##? )负先行,Assert该行不以#或##和空格开头
  • (捕获组2
  • .*整行匹配
  • (?:\n(?!^##? ).*)*可选匹配所有不以#或##开头的行和空格
  • )关闭组2

Regex demo

相关问题