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

GitHub Markdown锚链接的构造规则是什么?

你总结的规则不准确,既有错误描述,也遗漏了不少实际生效的锚点生成逻辑。GitHub Markdown标题锚点的完整生成规则如下:

  • 首先纠正原总结的错误点:空格不是被直接移除,而是会被替换为-。比如标题# Hello World生成的锚点是#hello-world,而非#helloworld。
  • 原总结里描述正确的规则:
    • 所有语言的Unicode文字字符(包括带变音符号的西文字母、中日韩等语言的表意文字等),西文字母会统一转为小写,无大小写区分的字符(比如中文)直接保留;西文带变音的字母不会剥离变音标记(比如示例里的Ö会转为ö直接保留,不会被转写为o)
    • 标题中原有的-、_字符会原样保留
    • /确实会被移除,但不止/,除了上述Unicode文字字符、阿拉伯数字、-、_之外的所有标点、特殊符号、emoji表情等全都会被直接删除
  • 未被提及的其他生效规则:
    • 阿拉伯数字会原样保留,不做任何转换或删除
    • 如果标题内写了行内HTML标签,标签本身会被完全剔除,只有标签包裹的文本内容会参与锚点生成
    • 如果同一文档内存在多个文本内容完全相同的标题,第一个标题使用按规则正常生成的锚点,从第二个开始会在锚点末尾依次追加-1、-2、-3的数字后缀,和标题本身自带的末尾数字互不干扰
    • 按前面规则处理后,如果最终字符串的开头或结尾位置存在多余的-,会被自动裁剪掉

用你给出的示例验证:标题# Söme/title-header_逐字符按规则处理:大写S转小写s,Ö转小写ö,m、e保留小写,/直接删除,后续t、i、t、l、e全部转小写,原有-保留,h、e、a、d、e、r转小写,末尾_保留,最终拼接结果就是sömetitle-header_,和GitHub实际渲染的锚点完全一致。

几个常见场景的生成示例供参考:

  • 标题# Hello, World! 2024:剔除逗号、感叹号后把空格替换为-,最终锚点为#hello-world-2024
  • 同一文档连续3个标题为# 示例标题:锚点依次为#示例标题、#示例标题-1、#示例标题-2
  • 标题# <b>加粗</b>文本测试:剔除b标签后替换空格为-,最终锚点为#加粗文本测试

内容的提问来源于stack exchange,提问作者Nico Schlömer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 21:03:57