2010-03-24 12 views
6

Ich versuche, einen Regex-Ausdruck zu verwenden, den ich auf dieser Website gefunden habe, und es scheint nicht zu funktionieren. Irgendwelche Ideen?Verwenden von Regex zum Entfernen von Skript-Tags

Eingabezeichenfolge:

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

Sie sollten Regex nicht verwenden, um * HTML * zu analysieren: HTML ist nicht ganz normal ;; Stattdessen sollten Sie einen HTML-Parser verwenden, der auf DOM basiert. –

+2

Es sieht so aus, als ob Sie diesen Artikel nicht gelesen haben und erklären, wie man regex benutzt, um HTML zu analysieren: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contented-tags/ 1732454 # 1732454 –

+0

Siehe S.Marks Antwort. Aber alles in allem ist es keine gute Regex, und Reguläre sind sowieso nicht wirklich dafür geeignet. –

Antwort

9

hinzufügen RegexOptions.Singleline

RegexOptions.IgnoreCase | RegexOptions.Singleline 

Und das wird nie auf einem folgen arbeiten.

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

So finden einen HTML-Parser wie HTML Agility Pack

+0

Danke. Irgendwelche anderen Empfehlungen über C# -Pakete wie Agility, HTML zu analysieren ??? – amitre

+0

'Singleline' ist die Option, die Sie wollen; Es erlaubt '.', Zeilenumbrüche zu finden. 'Multiline' bewirkt, dass' $ 'und'^'vor und nach den Zeilenvorschüben stehen; Es ist hier irrelevant. –

+0

@Alan, Du hast Recht! Fest! – YOU

7

Der Grund für die regex ist nicht, dass Sie Ihre Eingabe newlines hat und die Meta-char . es nicht übereinstimmen.

Um dies zu lösen Sie die RegexOptions.Singleline Option verwenden können, wie St. Markus sagt, oder Sie können die Regex ändern:

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

die [\d\D]. statt verwendet.

\d ist jede Ziffer und \D ist jeder nicht-digit, so [\d\D] eine Ziffer oder eine nicht-Ziffer, die wirksam ist, jede char.

+0

Danke. Ist dies auch eine Lösung für verschachtelte Skript-Tags? – amitre

1

Das ist ein bisschen kürzer:

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

oder

"<[^>]*>[^>]*>" 
+0

Danke. Ist dies auch eine Lösung für verschachtelte Skript-Tags? – amitre

+0

Ja, absolut, weil Skripte nie verschachtelt sind. – instcode

+1

Sie können tatsächlich tatsächlich verschachtelt werden. Zum Beispiel, wenn jemand eine Variable wie 'var a =" ";' innerhalb davon zuweist. – DitherSky

4

Wenn Sie tatsächlich eine HTML-Zeichenfolge zu sanieren (und Sie .NET verwenden) nehmen dann einen Blick auf die Microsoft Web Protection Library :

Sanitizer.GetSafeHtmlFragment(untrustedHtml); 

Es gibt eine Beschreibung here.

Verwandte Themen