Suche Regulären Ausdruck
Gonza
- javascript
0 Ashura0 Uschi Renziehausen0 scherzkeks0 Ashura
Hallo,
ich habe ein wenig Probleme, einen regulären Ausdruck zu finden. Er muss aus einer Zeichenfolge alles entfernen, was innerhalb von <a> </a> steht.
Das war mein Ansatz, aber er klappt nicht. Ich kann nicht gut mit den Dingern. ;)
/(^<a.+)(+.a>)/;
grüße
Gonza
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
Hi,
var regex = /<a(.*)>.+</a>/i;
var string = '<A href="Foo" title="test">Bar</a>';
string = '<a href="foo">hokus pokus verschwindibus</a> bla <a href="bar">bar</a>';
var result = regex.exec(string);
alert('<a' + result[1] + '></a>');
Ups, doch nicht verschwindibus ... ;-)
> Lerne die Regulären Ausdrücke sicher anzuwenden,
Genau! Tu das!
cu,
Andreas
--
[Warum nennt sich Andreas hier MudGuard?](http://www.Mud-Guard.de/)
[Schreinerei Waechter](http://www.schreinerei-waechter.de/)
Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
Hallo MudGuard.
[code lang=javascript]var regex = /<a(.*)>.+</a>/i;
var string = '<A href="Foo" title="test">Bar</a>';string = '<a href="foo">hokus pokus verschwindibus</a> bla <a href="bar">bar</a>';
Es war ein Vorschlag, Mitdenken ist erlaubt.
Einen schönen Sonntag noch.
Gruß, Ashura
Gugugg,
mit regulären Ausdrücken stehe ich auch immer auf Kriegsfuß, aber das Problem lässt sich ja vielleicht auch anders anders lösen:
// erst alle a-Elemente innerhalb des gewuenschten umgebendenden Elements suchen
var aElts = myElement.getElementsByTagName('a');
// dann durch das Array durchschleifen
for (var i = 0; i < aElts.length; i++) {
aElts[i].innerHTML = '';
}
Gruß, Uschi
aElts[i].innerHTML = '';
innerHTML ist nur für IE.
Vielleicht lieber die DHTML-Library von SelfHTML ;)
schönen Samstagabend noch,
scherzkeks
Hallo scherzkeks.
aElts[i].innerHTML = '';
innerHTML ist nur für IE.
Funktioniert im Fx, Opera und Konqueror aber ebenso gut und stellt damit eine Alternative (besser: Fallback) zu den http://de.selfhtml.org/javascript/objekte/node.htm@title=DOM-Funktionen dar.
Einen schönen Samstag noch.
Gruß, Ashura
Moin Ashura,
Dank auch von mir für deine Erklärung zum Regex unten. Erklärst du mir, was ich auf informatisch unter einem Fallback zu verstehen habe? innerHTML und das Fehlen einer wenig geschwätzigen DOM-Möglichkeit, einem Element ein paar unterschiedliche Kinder zu verpassen, ist übrigens so ein Punkt, warum ich bei Selfcode zum Thema Validität manchmal sagen möchte: va:(
Würde innerHTML nicht von so vielen Browsern akzeptiert, wäre das erste was ich tun würde, mir eine Funktion zu schreiben, die denselben Effekt hätte.
Schönes Rest-We, Uschi
Hallo Uschi.
Erklärst du mir, was ich auf informatisch unter einem Fallback zu verstehen habe?
Steht eine technisch weiter fortgeschrittene und umfangreichere Funktion „Bar“ nicht zur Verfügung, so sollte hierfür als Ersatzlösung (der Fallback) die ältere Funktion „Foo“ zur Verfügung gestellt werden, welche in Bezug auf die Grundwirkungsweise gleich ist. Damit soll versucht werden, zumindest ansatzweise die Wirkungsweise der Funktion „Bar“ in älteren bzw. „Bar“-unfähigen Clients nachzubilden, um so viele Clients wie möglich erreichen zu können.
Beispiel aus meinem Gästebuch (leicht modifziert):
if (bb.firstChild.nodeValue) {
// Code, wenn Client DOM-Funktionen versteht
}
else if (bb.innerText) {
// Code, wenn Client zumindest innerText versteht
}
innerHTML und das Fehlen einer wenig geschwätzigen DOM-Möglichkeit, einem Element ein paar unterschiedliche Kinder zu verpassen, ist übrigens so ein Punkt, warum ich bei Selfcode zum Thema Validität manchmal sagen möchte: va:(
Ich verstehe nicht, was du hiermit sagen möchtest.
Warum meinst du die DOM-Funktionen als geschwätzig (?) zu titulieren und was hat das mit Validität zu tun?
Würde innerHTML nicht von so vielen Browsern akzeptiert, wäre das erste was ich tun würde, mir eine Funktion zu schreiben, die denselben Effekt hätte.
Warum? Wenn im selben Atemzug die DOM-Funktionen rund um das node-Objekt gänzlich unterstützt würden, wäre dieser Umstand an sich schon erfreulich.
Oder beziehst du dich hier auf die Einfachheit, mit der man verarbeitbares HTML einfügen kann?
Wenn ja, dann hat dies nichts mit dem Ansatz des Document Object Models zu tun, da dort alles und jedes einen Knoten darstellt; innerHTML hingegen ist mit einem undurchsichtigen Knäuel vergleichbar.
Schönes Rest-We, Uschi
Danke, ebenfalls.
Gruß, Ashura
Hallo Ashura,
Danke für deine Fallback-Erklärung. Was innerHTML betrifft: ich beziehe mich tatsächlich auf die Einfachheit, mit der man verarbeitbares HTML einfügen kann. Wenn es innerHTML nicht gäbe, würde ich mir (mit DOM-Syntax) eine Funktion schreiben, die im Effekt das tut, was innerHTML so macht.
Sicher ist innerHTML ein undurchsichtiges Knäuel, weil man ja nicht weiß, wie das für die einzelnen Browser realisiert ist, Fakt ist doch aber, dass man diese Zusammenfassung sehr oft braucht und dass DOM-Schleiferei irgendwie schon wortreich und bisweilen ein wenig eklig ist.
Validität ist vielleicht der falsche Ausdruck, mir kommt das innerHTML innerhalb meiner sonstigen RumDOMserei immer ein wenig inkonsequent vor.
Die schreibfaule Uschi :)
Hallo Uschi.
Wenn es innerHTML nicht gäbe, würde ich mir (mit DOM-Syntax) eine Funktion schreiben, die im Effekt das tut, was innerHTML so macht.
Mein Ansatz dazu wäre:
Mittels regulärem Ausdruck (du siehst, es geht nicht ohne) einen gegebenen String nach „<“, „>“ und „=“ zu durchsuchen und anhand dessen Element-, Attribut- und Textknoten voneinander zu trennen.
Zudem müssten verschachtelte Elemente eigenständig per appendChild angelegt werden, was mitunter sehr komplex wird.
Hier stellt sich mir dann die Frage, ob die einmalige leichte Anwendung den enormen Aufwand des Nachkonstruierens von innerHTML wert ist.
[...] Fakt ist doch aber, dass man diese Zusammenfassung sehr oft braucht und dass DOM-Schleiferei irgendwie schon wortreich und bisweilen ein wenig eklig ist.
Ich tendiere eher zu mächtig. Die DOM-Methoden verschaffen Möglichkeiten, die innerHTML niemals bieten können wird.
Umgekehrt bietet aber auch innerHTML Möglichkeiten, die mit den DOM-Methoden nur sehr schwerlich umsetzbar sind, wie man vor Kurzem (</archiv/2005/11/t118364/#m758781>) sehen konnte.
Validität ist vielleicht der falsche Ausdruck, mir kommt das innerHTML innerhalb meiner sonstigen RumDOMserei immer ein wenig inkonsequent vor.
Inwiefern?
Einen schönen Sonntag noch.
Gruß, Ashura