Cortys: "camelCase" in css-Schreibweise umwandeln

Hallo!
Ich möchte einen CSS-Attribut-Namen aus der in JavaScript üblichen Schreibweise in den tatsächlichen CSS-Namen umwandeln.
Also z.B. so etwas: "backgroundColor" -> "background-color".

Wie sollte ich da am besten herangehen? Am liebsten würde ich nicht mit einer Schleife durch alle Zeichen laufen, da das bei vielen zu prüfenden Strings doch recht ineffizient ist.
Gibt es da eine bessere Lösung? Optimal wäre ein einziger RegEx. (Wenn möglich...)

Danke für eure Hilfe!

  1. Hi,

    "backgroundColor".replace(/([A-Z])/g, '-$1').toLowerCase();

    ~dave

    1. Hi,

      "backgroundColor".replace(/([A-Z])/g, '-$1').toLowerCase();

      ~dave

      Danke für die Antworten!
      Mache es jetzt mit dem RegEx. Mensch da hätte ich wirklich auch selber drauf kommen müssen... ;-)
      Naja hinterher ist man immer schlauer.

      Einen schöne Tag noch!

  2. Wie sollte ich da am besten herangehen? Am liebsten würde ich nicht mit einer Schleife durch alle Zeichen laufen, da das bei vielen zu prüfenden Strings doch recht ineffizient ist.

    Irgendwie muss man ja durch alle Zeichen laufen.
    RegEx sind aber bestimmt nicht effizienter. Ich glaub der Mechanismus dahinter ist noch um einiges komplexer als selber "kurz" mal nach bestimmten Zeichen suchen.

    Aber ich glaube in diesem Fall ists grad egal, da würd ich mir dann doch lieber die kurze Methode von dave geben, statt selber ein Codemonster zu schreiben.

    1. Moin Moin!

      Irgendwie muss man ja durch alle Zeichen laufen.
      RegEx sind aber bestimmt nicht effizienter.

      Das stimmt nur, wenn man Schleife und RegExp-Engine auf der selben Ebene (z.B. in C) vergleicht. Javascript dürfte Schleifen und String-Operationen um einiges langsamer abarbeiten als C, wodurch der Unterschied zu der (sicherlich optimierten) RegExp-Engine deutlich schrumpft.

      Am Ende hilft nur Profiling.

      So lange man diese Aktion aber nur für ein paar Strings laufen läßt, dürfte das ziemlich egal sein, weder handgeklöppelte Javascript-Basteleien noch die RegExp-Konstruktion von dave sollten merklich bremsen.

      Da gebe ich der kurzen und klaren RegExp-Variante von dave klar den Vorzug vor hundert Zeilen String-Gebastel in Javascript.

      Alexander

      --
      Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    2. Hallo,

      RegEx sind aber bestimmt nicht effizienter.

      Woraus schließt du das?
      http://jsperf.com/decamelcaser/2

      Versuch mal, die Plain-Variante weiter zu optimieren. An die RegExp wird sie im Durchschnitt wohl nicht heranreichen.

      Mathias

      1. Erstaunlich!
        Aber ich denk es ist wie Alexander schreibt, JavaScript hat da noch einige zeitraubende Funktionsaufrufe drin. Das wird bei regex im Hintergrund sicher viel schneller gelöst sein.
        Dann ist JS ja an sich nichts was direkt compiliert sondern interpretiert wird (oder ist das inzwischen anders?), von daher bedeutet mehr Code natürlich auch mehr Interpretation. Weiß nicht wie sehr das optimiert wird.

        1. Hallo,

          Dann ist JS ja an sich nichts was direkt compiliert sondern interpretiert wird (oder ist das inzwischen anders?), von daher bedeutet mehr Code natürlich auch mehr Interpretation. Weiß nicht wie sehr das optimiert wird.

          JavaScript wird über verschiedene Zwischenrepräsentationen letztlich in Maschinencode compiliert. Es gibt verschiedene Optimierungen. Viele Optimierungen greifen ähnlich wie bei Java erst bei Bedarf, d.h. wenn eine Funktion häufig aufgerufen wird und dabei als »heiß« angesehen wird.

          http://www.youtube.com/watch?v=FrufJFBSoQY
          http://wingolog.org/tags/v8
          http://blog.mozilla.com/dmandelin/2011/04/22/mozilla-javascript-2011/

          Mathias