Harald: RegEx für CSS-Klassen

Hallo,

ich möchte aus einer CSS-Datei die verschiedenen Definitionen heraussuchen, also z.B. bei:

body, html
{
  ....
}

h1
{
 ...
}

a.test:link, a.test:active, a.test:hover
{
 ...
}

möchte ich eine Liste mit
body
html
h1
a.test:link
a.test:active
a.test:hover

haben.

Soweit funktioniert das mit folgendem Ausdruck:

(\s*([^,{]+))

auch schon, allerdings wird mir nie das erste Element herausgesucht, also ich bekomme zwar a.test:active nud a.test:hover, aber nicht a.test:link und ebenso wenig h1.
Hat jemand eine Lösung für das Problem bzw. einen besseren regulären Ausdruck?

  1. Hi,

    (\s*([^,{]+))

    war es nicht so, dass ein + bedeutet 0 oder 1 mal und ein * 0 oder mehrmals.
    Wenn das nämlich so ist, würde es erklären warum du die ersten Werte nicht bekommst...

    MfG,
      Juan

    1. Ne leider net,

      • steht für ein oder mehr, * für kein oder mehr Zeichen,
        damit komm ich leider auch nicht weiter...
  2. Hallo,

    ich möchte aus einer CSS-Datei die verschiedenen Definitionen heraussuchen, also z.B. bei:

    body, html
    {
      ....
    }

    h1
    {
    ...
    }

    a.test:link, a.test:active, a.test:hover
    {
    ...
    }

    möchte ich eine Liste mit
    body
    html
    h1
    a.test:link
    a.test:active
    a.test:hover

    haben.

    Soweit funktioniert das mit folgendem Ausdruck:

    (\s*([^,{]+))

    Nein, denn Dein RegExp passt auf:

    ....
    }

    h1

    und auf:

    ...
    }

    a.test:link

    also:
    ein oder kein white-space, gefolgt von mindestens einem Zeichen, welches kein "," und kein "{" ist.

    auch schon, allerdings wird mir nie das erste Element herausgesucht,

    Doch, aber eben als:
    " ... \n}\n\nh1"
    und als:
    " ... \n}\n\na.test:link"

    Das, was Du möchtest, wird mit einfachem RegExp nicht funktionieren. Dazu ist eine komplette Programmlogik notwendig.

    viele Grüße

    Axel

  3. Hallo Freunde des gehobenen Forumsgenusses,

    ich möchte aus einer CSS-Datei die verschiedenen Definitionen heraussuchen, also z.B. bei:

    body, html
    {
      ....
    }
    möchte ich eine Liste mit
    body
    html

    haben.

    Ich würde das folgendermaßen lösen:
    Erstmal alle Zeilenumbrüche und Tabulatoren durch leerzeichen ersetzen.
    Dann alle doppelten Leerzeichen durch einfache ersetzen.

    Solange die Zeichenkette das Zeichen "{" enthält
      Der Selektor ist der String bis zum ersten "{".
      Selektor in Array schreiben.
      Alles bis zum ersten "}" entfernen.

    Eventuell noch das Array durchgehen und @media und @import entfernen,
    wenn du die nicht willst. Oder auch gleich beim Parsen drauf achten.

    Gruß
    Alexander Brock

    --
    A
    1. Hi,

      Ich würde das folgendermaßen lösen:
      Erstmal alle Zeilenumbrüche und Tabulatoren durch leerzeichen ersetzen.
      Dann alle doppelten Leerzeichen durch einfache ersetzen.

      Solange die Zeichenkette das Zeichen "{" enthält
        Der Selektor ist der String bis zum ersten "{".
        Selektor in Array schreiben.
        Alles bis zum ersten "}" entfernen.

      @media print {
        .navi { display:none; }
      }
      p { color: blue; }

      ergäbe dann
      @media all
      als ersten Selektor. Und
      } p
      als zweiten Selektor.

      Oder wie wäre es mit
      a:after { content: "}"; }

      So einfach ist das nicht mit dem Zerlegen, wenn's allgemeingültig sein soll ...

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.