Ashura: Suche Regulären Ausdruck

Beitrag lesen

Hallo Gonza.

ich habe ein wenig Probleme, einen regulären Ausdruck zu finden. Er muss aus einer Zeichenfolge alles entfernen, was innerhalb von <a> </a> steht.

Na dann schauen wir einmal.

Das war mein Ansatz, aber er klappt nicht. Ich kann nicht gut mit den Dingern. ;)

/(\^<a.+)(\+.a>)/;

Wir haben hier:

( : öffnende Kapselung
^ : ein maskiertes „^“
<a : den String „<a“
.+ : mindestens eines oder beliebig viele Zeichen
 ) : schließende Kapselung

( : öffnende Kapselung
+ : ein maskiertes „+“
 . : ein beliebiges Zeichen
a> : der String „a>“
 ) : schließende Kapselung

Warum meinst du „^“ und „+“ maskieren zu müssen?

Wir haben also den String „<a></a>“, wobei im öffnenden Tag noch Attribute enthalten sein können. Also müssen wir im Grunde nur die unter Umständen vorhandenen Attribute übernehmen, der Rest bleibt gleich.

Wir nehmen also:

<a : den String „<a“, um den Anfangstag erkennen zu können
 ( : öffnende Kapselung; wir brauchen nur die Attribute
.* : keines oder beliebig viele Zeichen; Attribute müssen nicht vorhanden sein
 > : das schließende „>“ vom Anfangstag
.+ : eines oder beliebig viele Zeichen; wenn sowieso nichts zwischen den Tags steht, können wir uns hiermit die Arbeit sparen
 < : das öffnende „<“ vom Endtag
/ : der maskierte Slash
a> : der String „a>“ welcher den Endtag abschließt

i : der Modifier i, um sowohl Groß, als auch Kleinbuchstaben zu erkennen

Wir erhalten also:

/<a(.*)>.+<\/a>/i

Und nun noch ein kleiner Test:

var regex = /<a(.*)>.+<\/a>/i;  
var string = '<A href="Foo" title="test">Bar</a>';  
  
var result = regex.exec(string);  
alert('<a' + result[1] + '><\/a>');

Lerne die Regulären Ausdrücke sicher anzuwenden, damit hast du ein mächtiges Werkzeug bei der Hand.

Einen schönen Samstag noch.

Gruß, Ashura