Regulärer Ausdruck
Max Bode
- javascript
Moin,
hab ein Problem mit einem regulären Ausdruck in Javascript.
Aus irgendeinem Grund hört exec() nach dem ersten Fund auch zu Suchen. Ist wahrscheinlich ein billiger Fehler aber aus irgendeinem Grund seh ich ihn nicht. Bin Anfänger bei regulären Ausdrücken in Javascript.
Mein Script sieht wie folgt aus:
window.onload = function()
{
var string = ".fon .class";
var expr = /.\w+/;
result = expr.exec(string);
alert(result.length);
for(var i = 0; i<result.length; i++)
{
alert(result[i]);
}
}
Achso, was ich will mit dem Script die einzelnen Klassen aus einem CSS string auslesen. Deshalb soll immer .Klasse gefunden werden!
Wäre nett, wenn einer von euch helfen könnte!
Danke im Vorraus!
Max
PS: Hab es auchschon mit /Ausdruck/g probiert um anzugeben, dass er weitersuchen soll, hat der dennoch nicht getan!
Lieber Max,
PS: Hab es auchschon mit /Ausdruck/g probiert um anzugeben, dass er weitersuchen soll
und wie ist es mit dem Parameter "m" für multi-line?
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Moin,
danke für die Antwort.
Geholfen hat es leider nicht, weder der Parameter "g", noch "gi", noch "m" scheinen etwas zu bewirken! Sollte jemand anderes noch einen Einfall haben, immer her damit.
Lieber Max,
Dein Problem ist, dass man exec() mehrfach auf ein Suchmuster anwenden kann (wenn man den Parameter "g" verwendet), um so auf die Teilergebnisse zugreifen zu können. SELFHTML <http://de.selfhtml.org/javascript/objekte/regexp.htm#exec@title=hat es die ganze Zeit gewusst>! Man muss nur das zweite Code-Beispiel genauer studieren...
function testRegExp(string) {
var expr = new RegExp("\\.\\w+", "g");
var result;
while (result = expr.exec(string)) {
alert(result);
}
}
testRegExp(".fon .class");
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Danke.
Ich verstehe nicht warum es funktioniert.
Ich habe mir den Teil zur exec()-Funktion ein Dutzend mal durchgelesen und war der Meinung, in dem angegebenen Beispiel machen sie es absolut genauso wie ich es bei mir gemacht habe. Und ich sehe bei deiner Form und meiner Form keinen großen Unterschied ausser einer anderen Schreibweise.
Aber unabhängig davon, es funktioniert.
Danke schön für die schnelle Antwort!
Max
Lieber Max,
Ich verstehe nicht warum es funktioniert.
... in dem angegebenen Beispiel machen sie es absolut genauso wie ich
da ist ein Denkfehler. Wenn man exec() anwendet, dann findet es _einen_ Treffer, wenn überhaupt. Sollte der Ausdruck Klammern haben, dann gibt es ein Array, in dem es mehrere Felder (für jeden geklammerten Ausdruck eines) geben kann. In Deinem Beispiel ohne Klammern gibt "result" eben nur einen Treffer, daher ist result.length=1.
Du gehst in Deinem OP davon aus, dass nach einmaligem exec() in "result" jetzt _alle_ _möglichen_ Treffer stehen. Dem ist natürlich nicht so. Wenn Du das Beispiel aus dem SELFHTML-Artikel, bzw. mein Beispiel anschaust, dann wird in diesen while-Schleifen immer wieder exec() angewandt (und nicht nur wie bei Dir durch das Ergebnis-Array iteriert) und es findet jedesmal einen neuen Teiltreffer. Das ist der wesentliche Unterschied zwischen Deinem Beispiel und dem von SELFHTML/mir.
Liebe Grüße aus Ellwangen,
Felix Riesterer.