non js-master: regexp

Hallo zusammen,

da ich mich immer etwas mit RegExp's schwer tue, bräuchte ich eure Hilfe.

Ich möchte in einem String sicherstellen, dass um ein Gleicheitszeichen immer ein Leerzeichen ist. Also wäre falsch "eins=zwei", richtig müsste es lauten "eins = zwei".

Ich dachte ich könnte es so lösen:

sStatement = sStatement.replace(/\S."=".\S/," = ");

Das funktioniert aber nicht. Ich habe es mit SELFHTML schon probiert, bin aber nicht zurecht gekommen, könnt ihr mir helfen?

  1. Hallo,

    wenn es nur für html-Ausgabe ist, wie wär's mit ner ganz einfachen Variante:

    sStatement.replace(/=/," = ");

    im Zweifel bekommst Du zwei Leerzeichen, aber die zeigt der Brauser ja nicht an.

    Gruß, Andreas

    --
    SELFFORUM - hier werden Sie geholfen,
    auch in Fragen zu richtiges Deutsch
    1. sStatement.replace(/=/," = ");
      im Zweifel bekommst Du zwei Leerzeichen, aber die zeigt der Brauser ja nicht an.

      Leider ist es nicht für den Browser. Ich muss einen String aus einem Textfeld korrigieren.

      Dabei habe ich auch das Problem, dass ich doppelte Anfühurngszeichen durch einfache ersetzen muss. Wie schreibt man das?

      replace(/"/,"'") geht nämlich nicht.

      1. hi,

        Dabei habe ich auch das Problem, dass ich doppelte Anfühurngszeichen durch einfache ersetzen muss. Wie schreibt man das?

        replace(/"/,"'") geht nämlich nicht.

        Doch, sollte so funktionieren - aber nur für das erste " im Text.

        Wenn du alle haben willst, verwende noch den Modifier g:

        alert('"hallo"'.replace(/"/g, "'"));

        gibt bei mir 'hallo' aus, wie gewünscht.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. hi,

    Ich möchte in einem String sicherstellen, dass um ein Gleicheitszeichen immer ein Leerzeichen ist. Also wäre falsch "eins=zwei", richtig müsste es lauten "eins = zwei".

    Ich dachte ich könnte es so lösen:
    sStatement = sStatement.replace(/\S."=".\S/," = ");

    Was sollen denn da die Anführungszeichen um das Gleichheitszeichen? Damit suchst du nach {nicht white space}"="{nicht white space} - aber das willst du doch gar nicht?

    "eins=zwei".replace(/\S=\S/," = ")
    wäre schon eher das, was du "suchst".
    Aber dabei werden jetzt die beiden Zeichen links und rechts vom Gleichheitszeichen als Bestandteil des Suchtreffers angesehen, also wird s=z komplett durch " = " ersetzt, heraus kommt ein = wei - auch noch nicht das, was du willst.

    Die Möglichkeit, Teile des Suchmusters nicht zum Suchtreffer hinzuzuählen, bieten RegEx in Javascript m.W. nicht - also musst du dafür sorgen, dass sie auch im Ersatz-String wieder mit aufgenommen werden:

    "eins=zwei".replace(/(\S)=(\S)/,"$1 = $2")

    Du siehst, ich habe erst mal \S eingeklammert, um damit sog. back references zu erzeugen - zwei "Variablen", in denen jetzt die mit \S gefundenen Zeichen abgelegt worden sind.
    Und als zweites setze ich diese dann im Ersatzausdruck wieder ein, als $1 und $2.

    Heraus kommt also bei obigem Ausdruck eins = zwei.

    Näheres dazu erfährst du bei http://de.selfhtml.org/javascript/objekte/regexp.htm#dollar_1_9

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hallo,

    Ich möchte in einem String sicherstellen, dass um ein Gleicheitszeichen immer ein Leerzeichen ist. Also wäre falsch "eins=zwei", richtig müsste es lauten "eins = zwei".

    Ich dachte ich könnte es so lösen:
    sStatement = sStatement.replace(/\S."=".\S/," = ");

    ^ein Zeichen, welches kein Leerzeichen oder White-Space-Steuerzeichen ist (\S), gefolgt von einem beliebigen Zeichen (.), gefolgt von der Zeichenfolge '"="', gefolgt von einem beliebigen Zeichen (.), gefolgt von \S (siehe vorn) soll ersetzt werden durch die Zeichenfolge ' = '.

      
    alert('Der Test"="zum Ersetzen'.replace(/\S."=".\S/," = "));  
    
    

    ergibt 'Der Te = m Ersetzen'

    Das funktioniert aber nicht. Ich habe es mit SELFHTML schon probiert, bin aber nicht zurecht gekommen, könnt ihr mir helfen?

    Das entsprechende Kapitel in SelfHTML http://de.selfhtml.org/javascript/objekte/string.htm#replace und auch die Kapitel http://de.selfhtml.org/javascript/objekte/regexp.htm und http://de.selfhtml.org/perl/sprache/regexpr.htm kennst Du also.

    Das Problem ist, dass auf \S alles passt, was kein White-Space ist und dass diese Zeichen dann mit ersetzt werden. Ich würde zwei Durchläufe machen. Zuerst alle möglichen Leerzeichen \s um Gleichheitszeichen entfernen, und dann alle Gleichheitszeichen durch " = " ersetzen.

      
    var TestString = "a=1; b= 2; c =3; d = 4; e  =  5; ab=1.1; bc= 2.2; cd =3.3; de = 4.4; ef  =  5.5; \"test 1\"=1; \"test 2\"= 2; \"test 3\" =3; \"test 4\" = 4; \"test 5\"  =  5;";  
    var Ergebnis = TestString.replace(/\s*=\s*|\s*=|=\s*/g, "=");  
    alert(Ergebnis);  
    Ergebnis = Ergebnis.replace(/=/g, " = ");  
    alert(Ergebnis);  
    
    

    viele Grüße

    Axel