• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

RegEx Ergebnisse in einzelnen Variablen speichern?

infinity95

New member
Guten tag jswelt,
ich habe eine kleine Frage.
Wen ich über RegEx (.match) was suche, dan gibt er mir die Ergebnisse in einer einzigen Variablen aus.
Wie kann ich jedes Ergebnis in einer eigenen Variablen speichern?

Mein Code:
HTML:
    var Aussage = "html, body{ background:red;} .test{ background:red;} .test2{ background:red;}";
    var Ergebnis = Aussage.match(/\..+{.+}/);
    alert(Ergebnis);

Meine Ausgabe:
.test{ background:red;} .test2{ background:red;}

Ich würde gerne eine Ausgabe wie folgt haben, um damit weiter zu arbeiten:

HTML:
Ergebnis[0] = ".test{ background:red;}";
Ergebnis[1] = ".test2{ background:red;}";

MfG
infinity
 
Zuletzt bearbeitet von einem Moderator:
Deine RegExp ist einfach falsch, da der Punkt zu viel matched und du gierige (greedy) Multiplier verwendest. Auch musst du das global-Flag verwenden, wenn die RegExp öfters auf den String angewendet werden soll:
Code:
	var Aussage = "html, body{ background:red;} .test{ background:red;} .test2{ background:red;}";
	var Ergebnis;
	var re = /\.[^\{\}]+\{[^\{\}]+\}/g;
	while ((Ergebnis = re.exec(Aussage)) !== null){
		alert(Ergebnis);
	}

PS: Lass' den Browser CSS parsen... der kann das besser.
 
Tatsache, Korbinian. Ohne Klammerung klappt das tatsächlich. Sogar in Perl :)
Code:
#!/usr/bin/perl
use strict;
use warnings;

my $Aussage = "html, body{ background:red;} .test{ background:red;} .test2{ background:red;}";

print STDOUT join("\n",$Aussage =~ /\.[^\{\}]+\{[^\{\}]+\}/g);

Mir schwebte das hier vor:
Code:
#!/usr/bin/perl
use strict;
use warnings;

my $Aussage = "html, body{ background:red;} .test{ background:red;} .test2{ background:red;}";

while($Aussage =~ /(\.[^{}]+\{[^{}]+\})/g){print "$1\n"}

Aber es kommt dasselbe raus ob mit oder ohne Klammern.
 
Deine RegExp ist einfach falsch, da der Punkt zu viel matched und du gierige (greedy) Multiplier verwendest. Auch musst du das global-Flag verwenden, wenn die RegExp öfters auf den String angewendet werden soll:
Code:
	var Aussage = "html, body{ background:red;} .test{ background:red;} .test2{ background:red;}";
	var Ergebnis;
	var re = /\.[^\{\}]+\{[^\{\}]+\}/g;
	while ((Ergebnis = re.exec(Aussage)) !== null){
		alert(Ergebnis);
	}

PS: Lass' den Browser CSS parsen... der kann das besser.


Ersteinmal Danke für eure Antworten und Entschuldigung für meine verspätete Antwort.

Ich habe noch eine kleine Frage.
Und zwar müsste ich doch bestimmt durch die while-Schleife nach jedem Ergebnis abfragen können, ob dannach ein media-query folgt, um nicht die Standard-CSS zu überschreiben.
Den Reg-Ex-Code zum suchen der media-querys werde ich ersteinmal versuchen selber zu schreiben.
Aber wie muss ich das in die Schleife einbringen?
 
ob dannach ein media-query folgt, um nicht die Standard-CSS zu überschreiben.
Sowas kannst du schon in der RegExp mit einem negative lookahead (https://msdn.microsoft.com/en-us/library/1400241x(VS.85).aspx ) abdecken.

ABER warum willst du unbedingt einen CSS-Parser in JS schreiben? Lass' das den Browser machen.
Geht es dabei immer noch um das "Zurücksetzen"? Das geht ziemlich sicher auch einfacher. Beschreib' doch mal genau, was exakt dein Problem ist.
 
Zurück
Oben