我想要有下划线的文本。
它不是代码,所以我不想使用代码格式。
我想停止 Markdown 将其视为斜体的指令。
我可以逃避 _each_underscore (见!),\
但我总共有 20 个,而且在源代码中看起来很难看,难以维护并且不是很干燥。
还有其他选择吗?
我想要有下划线的文本。
它不是代码,所以我不想使用代码格式。
我想停止 Markdown 将其视为斜体的指令。
我可以逃避 _each_underscore (见!),\
但我总共有 20 个,而且在源代码中看起来很难看,难以维护并且不是很干燥。
还有其他选择吗?
一些 Markdown 实现——特别是 Stack Overflow 的服务器端 C# 版本MarkdownSharp(它是可选行为)和客户端 JavaScript 版本PageDown,还有例如GitHub 的风格——由于您描述的原因而偏离了 Markdown 规范。
有关 Stack Overflow 的一些历史,请参阅两篇博客文章三个 Markdown Gotchas和Markdown,一年后。
由于这是对 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;
}