替换为.Replace / .Regex

时间:2011-07-26 12:03:27

标签: c# regex asp.net-mvc-3

我正在使用Html.Raw(Html.Encode())来允许一些html被允许。例如,我想要粗体,斜体,代码等...我不确定这是正确的方法,代码看起来很难看。

输入

  

您好,此文本将为[b]粗体[/ b]。 [代码]警报( “测试...”)[/代码]

输出

enter image description here

代码

    @Html.Raw(Html.Encode(Model.Body)
    .Replace(Environment.NewLine, "<br />")
    .Replace("[b]", "<b>")
    .Replace("[/b]", "</b>")
    .Replace("[code]", "<div class='codeContainer'><pre name='code' class='javascript'>")
    .Replace("[/code]", "</pre></div>"))

我的解决方案

我想让它变得有点不同。而不是使用BB-Tags我想使用更简单的标签。
例如*代表粗体。这意味着如果我输入This text is *bold*.,它会将文字替换为This text is <b>bold</b>.。有点像这个网站正在使用BTW。

问题

要实现这一点,我需要一些正则表达式,我几乎没有经验。我搜索了很多网站,但没有运气。

我的实现看起来像这样,但它失败了,因为我无法用char替换string

static void Main(string[] args)
{
    string myString = "Hello, this text is *bold*, this text is also *bold*. And this is code: ~MYCODE~";
    string findString = "\\*";
    int firstMatch, nextMatch;

    Match match = Regex.Match(myString, findString);

    while (match.Success == true)
    {
        Console.WriteLine(match.Index);
        firstMatch = match.Index;
        match = match.NextMatch();
        if (match.Success == true)
        {
            nextMatch = match.Index;

            myString = myString[firstMatch] = "<b>"; // Ouch!
        }
    }

    Console.ReadLine();
}

1 个答案:

答案 0 :(得分:3)

  

要实现这一点,我需要一些正则表达式

啊不,你不需要正则表达式。使用Regex操作HTML可能会导致一些undesired effects。因此,您可以简单地使用MarkDownSharp,这就是此网站用于将Markdown标记安全地呈现为HTML的方式。

像这样:

var markdown = new Markdown();
string html = markdown.Transform(SomeTextContainingMarkDown);

当然要对此进行修改,您将编写一个HTML帮助程序,以便在您的视图中:

@Html.Markdown(Model.Body)