ichbinich: Ersetzen - brauche Denkanstoss

Hallo,

steh grad auf'm Schlauch...

var temp = 'AntonBertaCäsar';

hier möchte ich gerne vor alle Großbuchstaben, die nicht am Anfang stehen ein Leerzeichen einfügen.

So wie ich RexExp verstanden hab, ist ein /(?!^)([A-Z])/ $1/g nicht umzusetzen, da ich nur die Tereffer erhalte?

var arr = temp.split(/[A-Z]); haut mir die Großbuchstaben weg.

Gibt es dafür eine direkte Umsetzung in JavaScript oder muss ich mir das selber basteln oder hab ich grad nur 'nen Knoten in meinem Denkapparat?

vg ichbinich

--
Kleiner Tipp:
Tofu schmeckt am besten, wenn man es kurz vor dem Servieren durch ein saftiges Steak ersetzt...
  1. Servus,

    iteriere durch den String und prüfe bei jedem Buchstaben, ob er derselbe ist wie der Buchstaben großgeschrieben. Falls ja, ersetze füge ein Leerzeichen davor ein.

  2. Hallo,

    steh grad auf'm Schlauch...

    var temp = 'AntonBertaCäsar';

    hier möchte ich gerne vor alle Großbuchstaben, die nicht am Anfang stehen ein Leerzeichen einfügen.

    kannst Du das bitte noch etwas genauer spezifizieren. Was bitte wäre das gewünschte Ergebnis bei 'ABC'?

    So wie ich RexExp verstanden hab, ist ein /(?!^)([A-Z])/ $1/g nicht umzusetzen, da ich nur die Tereffer erhalte?

    möchtest Du nur vor solche Großbuchstaben ein Leerzeichen einfügen, vor denen *kein* Großbuchstabe steht, so wäre dies sehr einfach:

      
        var temp = 'AntonBertaCäsar';  
        alert(temp.replace(/([^A-Z])([A-Z])/g, '$1 $2')); // gibt "Anton Berta Cäsar" aus  
    
    

    Möchtest Du vor jeden Großbuchstaben mit Ausnahme eines Großbuchstabens am Anfang ein Leerzeichen setzen, so ersetzte ich alle Großbuchstaben durch ein Leerzeichen, gefolgt von diesem Großbuchstaben und löschte ein Leerzeichen zu Beginn der Zeichenkette, das von einem Großbuchstaben gefolgt wird:

        var temp = 'ABC'  
        alert(temp.replace(/([A-Z])/g, ' $1').replace(/^ ([A-Z])/, '$1')); // gibt "A B C" aus  
    
    

    Lieber zwei einfache Ausdrücke als ein einzelner, der viel komplizierter ausfallen muss. Der Aufwand für das zweite replace hält sich in Grenzen :-)

    Freundliche Grüße

    Vinzenz

    1. @@Vinzenz Mai:

      nuqneH

      Möchtest Du vor jeden Großbuchstaben mit Ausnahme eines Großbuchstabens am Anfang ein Leerzeichen setzen, so ersetzte ich […]

      Du vielleicht, ich nicht. ;-)

      […] alle Großbuchstaben durch ein Leerzeichen, gefolgt von diesem Großbuchstaben und löschte ein Leerzeichen zu Beginn der Zeichenkette, das von einem Großbuchstaben gefolgt wird:

      Nein, wozu? Die Negation von /^/ funktioniert doch:

      temp.replace(/(?!^)([A-Z])/g, ' $1');

      Lieber zwei einfache Ausdrücke als ein einzelner,

      Lieber ein einfacher Ausdruck als zwei.

      der viel komplizierter ausfallen muss.

      Muss er nicht.

      Der Aufwand für das zweite replace hält sich in Grenzen :-)

      Nö, er überschreitet die Grenzen des Notwendigen.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
    2. Hallo,

      kannst Du das bitte noch etwas genauer spezifizieren. Was bitte wäre das gewünschte Ergebnis bei 'ABC'?

      Das kann nicht vorkommen,

      möchtest Du nur vor solche Großbuchstaben ein Leerzeichen einfügen, vor denen *kein* Großbuchstabe steht, so wäre dies sehr einfach:

      var temp = 'AntonBertaCäsar';
          alert(temp.replace(/([^A-Z])([A-Z])/g, '$1 $2')); // gibt "Anton Berta Cäsar" aus

      YMMD - das wars was ich brauche - danke dir!  
        
      vg ichbinich  
      
      -- 
      Kleiner Tipp:  
      Tofu schmeckt am besten, wenn man es kurz vor dem Servieren durch ein saftiges Steak ersetzt...
      
  3. @@ichbinich:

    nuqneH

    hier möchte ich gerne vor alle Großbuchstaben

    [A-Z] sind übrigens bei weitem nicht alle Großbuchstaben. Was ist mit 'AntonBertaCäsarÉmile'?

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. @@Gunnar Bittersmann:

      nuqneH

      [A-Z] sind übrigens bei weitem nicht alle Großbuchstaben. Was ist mit 'AntonBertaCäsarÉmile'?

      Und man möchte sicher nicht alle Großbuchstaben einzeln in die [ ] setzen. Gibt es eine Zeichenklasse für Großbuchstaben? AFAIS nein.

      Dann ist wohl ein regulärer Ausdruck hier untauglich ist es wohl sinnvoller, shns Vorschlag aufzugreifen:

      for (var i = 1, length = temp.length, s = ''; i < length; i++)  
      {  
        if (temp[i] == temp[i].toUpperCase()) s += ' ';  
        s += temp[i];  
      }
      

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Hi,

        if (temp[i] == temp[i].toUpperCase()) s += ' ';

        Schreibst du if wirklich so? Ohne die {}?
        Ich setze die immer, auch wenn sie nicht nötig sind.
        Irgendwie hätte ich dich auch so eingeschätzt.

        ~dave

        1. @@dave:

          nuqneH

          if (temp[i] == temp[i].toUpperCase()) s += ' ';

          Schreibst du if wirklich so? Ohne die {}?

          Mitunter, wenn abzusehen ist, dass keine zweite Anweisung hinzukommt. (Entsprechend manchmal auch in CSS.)

          Eigentlich hätte ich das Schleifeninnere auch einzeilig geschrieben:

          for (var i = 0, l = temp.length, s = ''; i < l; i++) s += temp[i] == temp[i].toUpperCase() ? ' ' + temp[i] : temp[i];

          oder gar alles als Einzeiler:

          for (var i = 0, l = temp.length, s = ''; i < l; s += temp[i] == temp[i].toUpperCase() ? ' ' + temp[i++] : temp[i++]);

          Ich setze die immer, auch wenn sie nicht nötig sind.

          Manche Coding-Styleguides sehen das so vor, ja.

          Irgendwie hätte ich dich auch so eingeschätzt.

          Du kennst mich nicht. ;-)

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Hi,

            Schreibst du if wirklich so? Ohne die {}?

            Mitunter, wenn abzusehen ist, dass keine zweite Anweisung hinzukommt. (Entsprechend manchmal auch in CSS.)

            Du schreibst CSS-Regeln ohne geschweifte Klammern ...?

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Hallo,

              Schreibst du if wirklich so? Ohne die {}?
              Mitunter, wenn abzusehen ist, dass keine zweite Anweisung hinzukommt. (Entsprechend manchmal auch in CSS.)
              Du schreibst CSS-Regeln ohne geschweifte Klammern ...?

              hab ich mich auch gefragt und war etwas verunsichert ...

              Ciao,
               Martin

              --
              Die letzten Worte des stotternden Beifahrers:
              Frei... frei... frei... freilich kommt da was!!
              Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            2. @@ChrisB:

              nuqneH

              Du schreibst CSS-Regeln ohne geschweifte Klammern ...?

              Ähm … ähm … ähm … @charset "UTF-8"; ;-b

              Qapla'

              --
              Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
              (Mark Twain)
          2. Hi,

            oh super, das erleichtert doch das Auskommentieren oder Dokumentieren von Codezeilen doch ungemein.

            LG

  4. @@ichbinich:

    nuqneH

    steh grad auf'm Schlauch...

    Ach so.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)