Markdown 示例链接不该算作正文链接:一次误报修复与回归验证

举报
yd_298688312 发表于 2026/11/02 08:50:48 2026/11/02
【摘要】 修复 Markdown 发布前检查工具把行内代码示例误报为空链接和缺失图片替代文字的问题,并用七组 Edge 浏览器输入回归验证。

我做的单文件工具“文稿灯塔”会按行检查 Markdown 的标题层级、空链接、图片替代文字和代码围栏。昨天测试代码围栏时,它已经能跳过代码块;今天补测行内代码,发现了一处误报:把 `![]()` 和 `[空]()` 放进正文作语法示例,页面仍把它们当作真正的图片和链接。

先复现,再确定边界

我在本地 Edge 中输入下面三行:

# 例子
`![]()` 和 `[空]()`
正常 [文档](https://example.com)

修复前,概览显示 3 个链接,第 2 行给出两条“链接地址为空”和一条“图片缺少替代文字”。实际正文只有第 3 行那个正常链接;第 2 行的两段内容都被反引号包着,是展示给读者看的字面语法。检查器用正则直接扫描整行,虽跳过了三反引号代码围栏,却没有区分同一行里的代码片段。

本次目标收得很窄:识别同一行内成对、长度相同的反引号,在扫描链接前把这一区间临时替换为空格。它只影响检查用的副本,不改变用户粘贴的原文,也不影响行号。未配对的反引号保留原样;带反斜杠转义的反引号不作为开头。代码围栏仍按原有状态处理。

核心调用改为:

const visible = maskInlineCode(line);
const matches = [...visible.matchAll(/!?\[[^\]]*\]\(([^)]*)\)/g)];

maskInlineCode() 先找开头连续反引号,再找长度相同的闭合连续反引号;找到一对才遮蔽两端和其中内容。这样链接规则无需猜测“代码”是什么,只看仍可见的正文。处理顺序也很重要:先判定整行是否在围栏内,再遮蔽行内代码,最后扫描链接与图片。

回归结果

我重新打开修改后的本地页面,在 Edge 中逐项输入并读取问题列表与链接数:

输入情形 链接数 检查结果
两段行内代码加一个正常链接 1 0 条问题
真正的空链接与缺少替代文字的图片 2 两类问题仍提示
双反引号包住的示例,加单反引号示例 0 0 条问题
未闭合的单反引号后有图片 1 图片问题仍提示
转义的反引号后有图片 1 图片问题仍提示
三反引号围栏内的图片语法 0 0 条问题

原有“载入示例”仍得到 3 个链接和 5 条问题:标题层级跳跃、图片缺少替代文字、空链接、重复标题及代码围栏未闭合。修复没有把真实问题一起遮蔽。修改已推到公开 GitCode 仓库的 main 分支,提交号 202b977。

这个检查器仍是轻量辅助工具,不是完整 Markdown 解析器。跨行的行内代码、复杂嵌套语法和引用式链接没有覆盖;这次只解决了同一行内示例误报,并用真实输入核对原规则仍生效。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。