将 Markdown 转换为 HTML 的正则表达式

7

您如何编写正则表达式将标记语言转换为HTML?例如,您可以输入以下内容:

This would be *italicized* text and this would be **bold** text

这将需要转换为:
This would be <em>italicized</em> text and this would be <strong>bold</strong> text

非常类似于stackoverflow使用的标记编辑控件。 澄清 就我所知,我正在使用C#。此外,这些是我想要允许的唯一真实标签/Markdown。要转换的文本量不到300个字符。
4个回答

6
最好的方法是找到适用于您正在使用的语言的Markdown库版本(您在问题中没有指定)。

现在您已经澄清了只想处理STRONG和EM,并且您正在使用C#,我建议您查看Markdown.NET以了解这些标签是如何实现的。正如您所看到的,它实际上是两个表达式。以下是代码:

private string DoItalicsAndBold (string text)
{
    // <strong> must go first:
    text = Regex.Replace (text, @"(\*\*|__) (?=\S) (.+?[*_]*) (?<=\S) \1", 
                          new MatchEvaluator (BoldEvaluator),
                          RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);

    // Then <em>:
    text = Regex.Replace (text, @"(\*|_) (?=\S) (.+?) (?<=\S) \1",
                          new MatchEvaluator (ItalicsEvaluator),
                          RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline);
    return text;
}

private string ItalicsEvaluator (Match match)
{
    return string.Format ("<em>{0}</em>", match.Groups[2].Value);
}

private string BoldEvaluator (Match match)
{
    return string.Format ("<strong>{0}</strong>", match.Groups[2].Value);
}

真的不应该关心使用什么编程语言...只需要一个简单的正则表达式来处理条件就可以了。 - mattruma
我在问题中添加了一些澄清。 - mattruma
Markdown.NET 已经停止维护很长时间了。现在有一个 StackOverflow 实现的替代品:MarkdownSharp - http://blog.stackoverflow.com/2009/12/introducing-markdownsharp/ - Ofer Zelig

5

我刚刚在http://kore-nordmann.de/blog/do_NOT_parse_using_regexp.html上看到了以下文章。 - mattruma

1

我不了解具体的C#,但在Perl中它应该是这样的:

\\\*\\\*(.*?)\\\*\\\*/
\< bold\>$1\<\/bold\>/g

\\\*(.\*?)\\\*/
\< em\>$1\<\/em\>/g

0
我看到了以下帖子,建议不要这样做。但在我的情况下,我想保持简单,但考虑到jop的建议,我会发布这篇文章,以防其他人想要这样做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接