Regex Hilfe
Zappda
- javascript
0 Gunnar Bittersmann0 Zappda
0 seth_not@home
Hi,
ich habe ein Problem mit einem Regex in JS. Ich möchte einen Text ersetzen, der über mehrere Zeilen geht, zB diesen HTML-Code:
<style type="text/css">
<!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
H2 { margin-bottom: 0.21cm }
-->
</style>
Das habe ich in JavaScript mit folgendem Regex und vielen anderen versucht: text.replace(/<style[^>]*>[.\d\w\r\n]*/gi, 'asd');
Doch leider ersetzt er mir nur den Anfangs-Tag mit einem Zeilenumbruch.
Was mach ich falsch? Ich möchte gerne den gesamten Inhalt zwischen <style und </style> löschen.
Gruss
Zappda
@@Zappda:
Was mach ich falsch? Ich möchte gerne den gesamten Inhalt zwischen <style und </style> löschen.
Und worum willst du dafür einen regulären Ausdruck einsetzen?
document.getElementsByTagName("style")[0].innerHTML = "";
sollte es doch viel effizienter tun.
Oder per DOM das 'style'-Element ganz löschen.
Live long and prosper,
Gunnar
^^Der HTML-Code steht in einer Text-Area und gehört nicht zum Dokument an sich ;)
gudn tach!
<style type="text/css">
<!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
H2 { margin-bottom: 0.21cm }
-->
</style>
Das habe ich in JavaScript mit folgendem Regex und vielen anderen versucht: text.replace(/<style[^>]*>[.\d\w\r\n]*/gi, 'asd');
der teil
<style[^>]*>
matcht
<style type="text/css">
und der teil
[.\d\w\r\n]*
matcht den darauffolgenden zeilenumbruch.
Was mach ich falsch?
der punkt hat innerhalb einer zeichenklassendefinition seine literale bedeutung, d.h. er matcht tatsaechlich nur einen punkt.
Ich möchte gerne den gesamten Inhalt zwischen <style und </style> löschen.
eine moeglichkeit:
text.replace(/(<style[^>]*>)(?:.|[\r\n])*?(</style>)/gi, '$1asd$2');
im javascript-code, darf nun aber nirgends "</style>" vorkommen...
mit lookbehind- und lookahead-assertions waeren auch noch andere moeglichkeiten denkbar, aber javascript kennt afaik standardmaessig kein lookbehind.
prost
seth
Thx, funzt einwandfrei.
Kannst du mir den Part (?:.|[\r\n])*? erklären?
Also in der Klammer steht ja "entweder jedes Zeichen" oder "Zeilenumbruch".
Aber was bedeutet das "?:" davor und das Fragezeichen am Ende?
Gruss
Zappda
@@Zappda:
Kannst du mir den Part (?:.|[\r\n])*? erklären?
SELFHTML kann.
Aber was bedeutet das "?:" davor
http://de.selfhtml.org/perl/sprache/regexpr.htm#rangfolge
und das Fragezeichen am Ende?
http://de.selfhtml.org/perl/sprache/regexpr.htm#gierig_genuegsam
Live long and prosper,
Gunnar
Hi,
text.replace(/(<style[^>]*>)(?:.|[\r\n])*?(</style>)/gi, '$1asd$2');
Kennt javascript kein s-Flag?
Damit würde (?:.|[\r\n]) auf . schrumpfen.
cu,
Andreas
gudn tach!
text.replace(/(<style[^>]*>)(?:.|[\r\n])*?(</style>)/gi, '$1asd$2');
Kennt javascript kein s-Flag?
Damit würde (?:.|[\r\n]) auf . schrumpfen.
zumindest in den ecma262-spezifikationen (von 1999, krass!) habe ich nur i-, m- und g-modifier gefunden und den ausdruecklichen hinweis, dass nur diese drei erlaubt sind. ich weiss allerdings nicht, wie massgeblich dieses dokument ist.
prost
seth