18

我想要有下划线的文本。

它不是代码,所以我不想使用代码格式。

我想停止 Markdown 将其视为斜体的指令。

我可以逃避 _each_underscore (见!),\但我总共有 20 个,而且在源代码中看起来很难看,难以维护并且不是很干燥。

还有其他选择吗?

4

1 回答 1

16

一些 Markdown 实现——特别是 Stack Overflow 的服务器端 C# 版本MarkdownSharp(它是可选行为)和客户端 JavaScript 版本PageDown,还有例如GitHub 的风格——由于您描述的原因而偏离了 Markdown 规范。

有关 Stack Overflow 的一些历史,请参阅两篇博客文章三个 Markdown GotchasMarkdown,一年后

由于这是对 Markdown 的普遍批评,因此可能有更多的实现使这种行为可由用户设置,或者完全采用更严格的版本。所以这取决于你使用的是什么实现。

如果您使用的是基于 John Gruber 的原始 Perl 实现的端口(即“大量正则表达式替换”版本),那么您自己进行此更改应该相当容易。相关函数可能被称为_DoItalicsAndBold(原始 Perl 版本,Showdown/PageDown)、DoItalicsAndBold(MarkdownSharp)、_do_italics_and_bold(python-markdown2)或类似名称。

查看该函数的 PageDown 版本, 了解 Stack Overflow 上使用的更严格的正则表达式:

function _DoItalicsAndBold(text) {

    // <strong> must go first:
    text = text.replace(/([\W_]|^)(\*\*|__)(?=\S)([^\r]*?\S[\*_]*)\2([\W_]|$)/g,
    "$1<strong>$3</strong>$4");

    text = text.replace(/([\W_]|^)(\*|_)(?=\S)([^\r\*_]*?\S)\2([\W_]|$)/g,
    "$1<em>$3</em>$4");

    return text;
}
于 2012-04-25T06:00:23.007 回答