Regex для исправления префикса Get_afeHtmlFragment x_ - PullRequest
0 голосов
/ 18 июля 2011

При использовании Sanitizer.GetSafeHtmlFragment из Microsoft AntiXSSLibrary 4.0 я заметил, что он изменяет мой HTML-фрагмент с:

<code><pre class="brush: csharp">

до:

<code><pre class="x_brush: x_csharp">

К сожалению, их API не позволяет нам отключить это поведение. Поэтому я хотел бы использовать регулярное выражение (C #) для исправления и замены строк типа «x_anything» на «что-нибудь», которые встречаются внутри атрибута class = «».

Может кто-нибудь помочь мне с RegEx сделать это?

Спасибо

ОБНОВЛЕНИЕ - у меня это сработало:

 private string FixGetSafeHtmlFragment(string html)
        {
            string input = html;
            Match match = Regex.Match(input, "class=\"(x_).+\"", RegexOptions.IgnoreCase);

            if (match.Success)
            {
                string key = match.Groups[1].Value;
                return input.Replace(key, "");
            }
            return html;
        }

Ответы [ 2 ]

0 голосов
/ 17 ноября 2012

Прошло уже больше года с тех пор, как это было опубликовано, но вот какое-то регулярное выражение, которое вы можете использовать, которое удалит до трех экземпляров класса.Я уверен, что есть более чистый способ, но он выполняет свою работу.

VB.Net Код:

Regex.Replace(myHtml, "(<\w+\b[^>]*?\b)(class="")x[_]([a-zA-Z]*)( )?(?:x[_])?([a-zA-Z]*)?( )?(?:x[_])?([^""]*"")", "$1$2$3$4$5$6$7")
0 голосов
/ 18 июля 2011

Я не уверен на 100% в C # @ (дословном символе), но я думаю, что это должно соответствовать x_ внутри любого class="" и заменить его пустой строкой:

string input = 'class="x_something"';
Match match = Regex.Match(input, @'class="(x_).+"',
    RegexOptions.IgnoreCase);

if (match.Success)
{
    string key = match.Groups[1].Value;
    string v = input.Replace(key,"");
}
...