Заменить на .Replace / .Regex - PullRequest
       4

Заменить на .Replace / .Regex

3 голосов
/ 26 июля 2011

Я использую Html.Raw(Html.Encode()), чтобы разрешить использование некоторых html. Например, я хочу жирный, курсив, код и т. Д. Я не уверен, что это правильный метод, код кажется довольно уродливым.

Input

Здравствуйте, этот текст будет [b] жирным шрифтом [/ b]. [Код] оповещения ( "Test ...") [/ код]

выход

enter image description here

код

<code>    @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]", "
"))

Мое решение

Я хочу сделать все по-другому. Вместо использования BB-тегов я хочу использовать более простые теги.
Например, * будет выделено жирным шрифтом. Это означает, что если я введу This text is *bold*., текст будет заменен на This text is <b>bold</b>.. Вроде как этот сайт использует BTW.

Проблема

Чтобы реализовать это, мне нужен Regex, и у меня практически нет опыта работы с ним. Я искал много сайтов, но не повезло.

Моя реализация выглядит примерно так, но не получается, поскольку я не могу заменить 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 Ответ

3 голосов
/ 26 июля 2011

Чтобы реализовать это, мне нужно Regex

Ах, нет, тебе не нужно регулярное выражение. Работа с HTML с помощью Regex может привести к некоторым нежелательным эффектам . Таким образом, вы можете просто использовать MarkDownSharp , который, кстати, используется на этом сайте для безопасной визуализации Markdown разметки в HTML.

Как это:

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

Конечно, чтобы исправить это, вы должны написать вспомогательный HTML-код, чтобы на ваш взгляд:

@Html.Markdown(Model.Body)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...