正则表达式来标记转换到HTML(Regular expression to convert mark

2019-07-30 00:01发布

你会如何写一个正则表达式来标记转换分解成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

非常类似于计算器使用的标记下来的编辑控件。

澄清

对于什么是值得的,我使用C#。 此外,这些是唯一真正的标签/降价,我想允许。 文本的量被转换将小于300个字符左右。

Answer 1:

最好的办法是找到一个版本移植到任何语言您使用的是降价库(你没有在你的问题中指定)。


现在你已经澄清,你只需要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);
}


Answer 2:

一个单一的正则表达式不会做。 每个文本标记都会有它自己的HTML翻译。 更好地研究如何在现有的转换器来实现,以得到它是如何工作的想法。

http://en.wikipedia.org/wiki/Markdown#See_also



Answer 3:

我不知道C#具体,但在Perl这将是:
S /
\ * \ *(。*?)\ * \ * /
\ <粗体> $ 1 \ </粗体> /克
S /
\ *(。*?)\ * /
\ <EM> $ 1 \ </ EM> /克



Answer 4:

我碰到下面的职位是建议不要这样做。 在我来说,虽然我希望保持它的简单,但想到我会张贴此每JOP的的情况下,别人想做这一建议。



文章来源: Regular expression to convert mark down to HTML