如何通过正则表达式提取Markdown文件中的h1和h2级标题
修正方案
你写的正则核心问题是没有限制匹配的1~2个#前方不能存在其他#,会把三级及以上标题开头的前两个#误命中,导致错误提取。
最终可用正则
/(?<!#)#{1,2} ([^\r\n]*)/gm
各部分逻辑说明
(?<!#):负向回顾断言,确保当前匹配的#前缀前方没有多余的#,过滤三级及以上标题#{1,2}:匹配1个或2个#,对应Markdown的h1、h2级别- 后缀空格:匹配Markdown标题要求的
#和内容之间的强制空格 ([^\r\n]*):捕获组,匹配除换行符外的所有字符,直接得到标题文本内容gm:全局匹配+多行匹配模式,逐行扫描整个Markdown内容
用这个正则测试你给出的用例,捕获组返回的结果刚好是['first', 'second', 'fourth'],完全符合需求。
如果你的运行环境不支持负向回顾断言,也可以用符合标准Markdown规范的行首匹配写法:
/^#{1,2} ([^\r\n]*)/gm
这个写法要求标题必须出现在行首,也能过滤三级及以上标题。
内容的提问来源于stack exchange,提问作者Monkey D. Teach
相关产品推荐
相关产品推荐

