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

编写正则匹配末尾无[#锚点]的1-4级Markdown标题

解决方案

直接在VS Code搜索框开启正则模式,使用以下表达式即可:

^#{1,4}\s+(?!.*\[#[^\]]*\]$).*$

规则说明

  • ^#{1,4}\s+:匹配行首1到4个#符号,以及#后跟随的至少1个空格(符合标准Markdown标题语法,避免把正文里带#的标签误判为标题)
  • (?!.*\[#[^\]]*\]$):负向预查逻辑,判断当前位置到行尾不存在[#锚点名称]格式的结尾标记,其中[^\]]*用来匹配锚点名称,避免锚点内出现]字符时匹配逻辑错乱
  • .*$:匹配标题剩余的所有内容直到行尾

之前正则失效的原因

  • 第一个正则^#{1,4}.*\s(?!\[#.*\])$强制要求行尾前必须存在一个空白字符,仅当空白字符后不存在锚点标记时才命中,自然无法匹配末尾无多余空格的常规无锚点标题。
  • 第二个正则^#{1,4}.*(?!\[#.*\])$中.*是贪婪匹配模式,会直接匹配到整行的最末尾,此时后续没有任何字符,负向预查的判定条件永远成立,因此会匹配所有带/不带锚点的标题,出现误判。

匹配效果验证

测试用例下:

  • 会命中## My Big Heading这类无锚点标题
  • 不会命中## My Big Heading [#my-big-anchor]这类末尾带合规锚点的标题
  • 兼容标题末尾带/不带多余空格的场景,无漏匹配、误匹配问题

如果需要兼容#后不加空格的非标准Markdown标题写法,可将表达式中\s+替换为\s*即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 13:18:33