# 如何/在哪里自定义 Markdown 解析器

**URL:** <https://meta.discourse.org/t/how-where-to-customize-markdown-parser/147538>\
**Category:** Development\
**Created:** [2020年四月10日 11:25 UTC](https://meta.discourse.org/t/how-where-to-customize-markdown-parser/147538 "2020-04-10T11:25:25Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![mentalstring](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mentalstring/32/168934_2.png) [@mentalstring](https://meta.discourse.org/u/mentalstring)\
**Post date:** [2020年四月10日 11:25 UTC](https://meta.discourse.org/t/how-where-to-customize-markdown-parser/147538/1 "2020-04-10T11:25:25Z")

</div>

我正在准备一个使用 SSO 的 Discourse 实例，对我们来说，支持现有用户名（这些用户名在任意位置都包含下划线和连字符）非常重要。我已经成功更新了 Discourse 代码中的正则表达式以实现这一功能，包括让作曲器中的用户名自动补全功能也能很好地配合使用。

然而，我在不熟悉的 Markdown 解析器方面遇到了问题。具体来说，当 @提及 的用户名在开头和结尾都包含下划线时，根据 Markdown 规范，它会被渲染为斜体。因此，目前像 `@_username_` 这样的帖子会被渲染为 @_username_（而不是可点击的链接）。

有人能指点我从哪里开始着手自定义吗？我是 Discourse 的新手，任何帮助都非常感激。提前感谢！

---

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2020年四月10日 20:29 UTC](https://meta.discourse.org/t/how-where-to-customize-markdown-parser/147538/2 "2020-04-10T20:29:43Z")

</div>

这将是\_精英级别\_的难度。如果我是你，我会放弃这个想法，接受用户名的小幅修改。这是我作为在此领域拥有 8 年以上经验的专业人士给出的建议。

---

<div class="post-metadata">

**Author:** ![mentalstring](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mentalstring/32/168934_2.png) [@mentalstring](https://meta.discourse.org/u/mentalstring)\
**Post date:** [2020年四月28日 16:49 UTC](https://meta.discourse.org/t/how-where-to-customize-markdown-parser/147538/3 "2020-04-28T16:49:21Z")

</div>

感谢您提醒此事。这确实超出了我的能力范围。

我正在考虑聘请具备相关技能的人来调查这个问题。如果最终完成，假设一切正常且通过所有测试，您是否愿意将其纳入核心代码？或者，Discourse 是否永远不会在用户名中支持下划线或连字符？我只是想确认这应该是一个补丁（PR）还是一个插件。

---

<div class="post-metadata">

**Author:** ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)\
**Post date:** [2020年四月28日 20:26 UTC](https://meta.discourse.org/t/how-where-to-customize-markdown-parser/147538/4 "2020-04-28T20:26:58Z")

</div>

> [@mentalstring](#):
>
> 你会将此纳入核心吗？

不，我不会考虑这样做。

---

<div class="post-metadata">

**Author:** ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)\
**Post date:** [2020年四月28日 21:34 UTC](https://meta.discourse.org/t/how-where-to-customize-markdown-parser/147538/5 "2020-04-28T21:34:26Z")

</div>

我同意杰夫的观点，强烈建议你中止这项任务。

在 Markdown 引擎中调整规则的优先级很可能会带来严重的副作用。
