Использование Regex для удаления тегов скрипта - PullRequest
6 голосов
/ 24 марта 2010

Я пытаюсь использовать выражение Regex, которое я нашел на этом сайте, и оно не работает. Есть идеи?

Входная строка :

sFetch = "123<script type=\"text/javascript\">\n\t\tfunction utmx_section(){}function utmx(){}\n\t\t(function()})();\n\t</script>456";

Regex

sFetch = Regex.Replace(sFetch, "<script.*?>.*?</script>", "", RegexOptions.IgnoreCase);

Ответы [ 4 ]

9 голосов
/ 24 марта 2010

Добавить RegexOptions.Singleline

RegexOptions.IgnoreCase | RegexOptions.Singleline

И это никогда не сработает в следующем.

<script
>
alert(1)
</script
/**/
>

Итак, найдите HTML-анализатор, такой как HTML Agility Pack

8 голосов
/ 24 марта 2010

Причиной сбоя регулярного выражения является то, что ваш ввод имеет newlines, а метасимвол . не соответствует ему.

Чтобы решить эту проблему, вы можете использовать опцию RegexOptions.Singleline, как говорит С.Марк, или вы можете изменить регулярное выражение на:

"<script[\d\D]*?>[\d\D]*?</script>"

, который использовал [\d\D] вместо ..

\d - любая цифра, а \D - любая не цифра, поэтому [\d\D] - это цифра или не цифра, которая фактически является любым символом.

4 голосов
/ 28 октября 2011

Если вы действительно хотите очистить HTML-строку (и вы используете .NET), взгляните на Microsoft Web Protection Library :

Sanitizer.GetSafeHtmlFragment(untrustedHtml);

Здесь есть описание здесь .

1 голос
/ 24 марта 2010

Это немного короче:

 "<script[^<]*</script>"

или

"<[^>]*>[^>]*>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...