# 自动链接 (拓展)

GFM 启用自动链接扩展,它的自动链接将在更多条件下被识别。
在没有<>的情况下,自动链接 (opens new window)也能被构造出来,尽管在少许语境中才能被识别出来。所有这些已识别的自动链接只能出现在行的开头,空格之后,或任何分隔字符*_~(之后。
当文本www.后跟有效域名 (opens new window)时,将识别扩展的 www 自动链接 (opens new window)有效域名 (opens new window)由字母数字字符,下划线(_),连字符(-)和句号(.)组成。 必须至少有一个句号,并且域名的最后两段中不能存在下划线。
http会被自动插入:

示例 621

Markdown HTML 效果
www.commonmark.org

<p><a href="http://www.commonmark.org">www.commonmark.org</a></p>

有效域名 (opens new window)之后,可能会出现零个或多个非空格非<字符:

示例 622

Markdown HTML 效果
Visit www.commonmark.org/help for more information.

<p>Visit <a href="http://www.commonmark.org/help">www.commonmark.org/help</a> for more information.</p>

然后,我们应用扩展自动链接路径验证 (opens new window),如下所示:
尾随标点符号(特别是?!.,:*_,和~)不会被视为自动链接的一部分,尽管它们可能包含在链接的内部:

示例 623

Markdown HTML 效果
Visit www.commonmark.org.

Visit www.commonmark.org/a.b.

<p>Visit <a href="http://www.commonmark.org">www.commonmark.org</a>.</p>
<p>Visit <a href="http://www.commonmark.org/a.b">www.commonmark.org/a.b</a>.</p>

当自动链接以)结束时,我们扫描整个自动链接以获得括号总数。如果关闭括号的数量多于打开括号,我们不会考虑自动链接的最后一个字符部分,以便在括号内包含自动链接:

示例 624

Markdown HTML 效果
www.google.com/search?q=Markup+(business)

www.google.com/search?q=Markup+(business)))

(www.google.com/search?q=Markup+(business))

(www.google.com/search?q=Markup+(business)

<p><a href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a></p>
<p><a href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a>))</p>
<p>(<a href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a>)</p>
<p>(<a href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a></p>

此检查仅在链接以右括号)结束时完成,因此如果唯一的括号位于自动链接的内部,则不会应用特殊规则:

示例 625

Markdown HTML 效果
www.google.com/search?q=(business))+ok

<p><a href="http://www.google.com/search?q=(business))+ok">www.google.com/search?q=(business))+ok</a></p>

如果自动链接以分号(;)结尾,我们检查它是否看起来像实体引用;如果前面的文本后跟一个或多个字母数字字符。它将从自动链接中排除:

示例 626

Markdown HTML 效果
www.google.com/search?q=commonmark&hl=en

www.google.com/search?q=commonmark&hl;

<p><a href="http://www.google.com/search?q=commonmark&amp;hl=en">www.google.com/search?q=commonmark&amp;hl=en</a></p>
<p><a href="http://www.google.com/search?q=commonmark">www.google.com/search?q=commonmark</a>&amp;hl;</p>

<可以中断自动链接。

示例 627

Markdown HTML 效果
www.commonmark.org/he<lp

<p><a href="http://www.commonmark.org/he">www.commonmark.org/he</a>&lt;lp</p>

当有方案http://https://,或ftp://后跟一个有效域名 (opens new window)和零个或多个非空字符非<字符,根据扩展自动链接路径验证 (opens new window),这就是一个拓展的自动链接 (opens new window)

示例 628

Markdown HTML 效果
http://commonmark.org

(Visit https://encrypted.google.com/search?q=Markup+(business))

<p><a href="http://commonmark.org">http://commonmark.org</a></p>
<p>(Visit <a href="https://encrypted.google.com/search?q=Markup+(business)">https://encrypted.google.com/search?q=Markup+(business)</a>)</p>

在任何文本节点中识别电子邮件地址时,将识别扩展的电子邮件自动链接 (opens new window)。电子邮件地址根据以下规则识别:

  • 一个或多个字符,字母数字,或.-_,或 +
  • 一个 @ 符号。
  • 一个或多个字母数字,或 .-_。 这里至少有一个字符必须是句号(.)。 最后一个字符不能是-_。 如果最后一个字符是句号(.),它将从自动链接中排除。

scheme mailto:将自动添加到生成的链接:

示例 629

Markdown HTML 效果
foo@bar.baz

<p><a href="mailto:foo@bar.baz">foo@bar.baz</a></p>

+可以出现在@之前, 不能在其后。

示例 630

Markdown HTML 效果
hello@mail+xyz.example isn't valid, but hello+xyz@mail.example is.

<p>hello@mail+xyz.example isn't valid, but <a href="mailto:hello+xyz@mail.example">hello+xyz@mail.example</a> is.</p>

.-_可以同时出现在@的两边,但只有 . 能出现在电子邮件地址的末尾,在这种情况下,它不会被视为地址的一部分:

示例 631

Markdown HTML 效果
a.b-c_d@a.b

a.b-c_d@a.b.

a.b-c_d@a.b-

a.b-c_d@a.b_

<p><a href="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a></p>
<p><a href="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a>.</p>
<p>a.b-c_d@a.b-</p>
<p>a.b-c_d@a.b_</p>