Fridleif: Verwendung eines Arrays?

Hallo Zusammen,

um den Inhalt eines Textfeldes auf bestimmte Inhalte zu prüfen und diese zu ersetzen, verwende ich folgendes Script:

Hier z.B. wird nach der Buchstabengruppe "sgdh" gesucht und durch "Sehr geehrte Damen und Herren, " ersetzt.

Ich möchte jedoch das Ganze mit viele andere Abkürzungen erweitern. Ich gehe davon aus, dass es sich mit einem Array realisieren lässt. Nur wie?

  
  var vermerk1 = document.case_inhalt.v1.value;  
  var Suchvermerk1 = 'sgdh';  
  var Ersatzvermerk1 = 'Sehr geehrte Damen und Herren,';  
  var LaengeSuchvermerk1 = Suchvermerk1.length;  
  var LaengeErsatzvermerk1 = Ersatzvermerk1.length;  
  var Pos = vermerk1.indexOf(Suchvermerk1, 0);  
  while (Pos >= 0)  
   {  
     vermerk1 = vermerk1.substring(0, Pos) + Ersatzvermerk1 + vermerk1.substring(Pos + LaengeSuchvermerk1);  
     Pos = vermerk1.indexOf(Suchvermerk1, Pos + LaengeErsatzvermerk1);  
   }  

Hat jemand einen Vorschlag?

Bereits jetzt vielen lieben Dank

Sascha

  1. Hallo Sascha,

    ein Objekt waere hier die einfachere Loesung.

      
    var eingabe = document.case_inhalt.v1.value;  
    var verzeichnis = {  
      sgdh: 'Sehr geehrte Damen und Herren',  
      mfg: 'Mit freundlichen Gruessen'  
      ste: 'Sieben traege Esel' // dieses (zugebenermassen daemliche) Beispiel beachten  
    }  
      
    for (var abkuerzung in verzeichnis) {  
      eingabe = eingabe.replace(abkuerzung,  verzeichnis[abkuerzung]);  
    }  
    alert(eingabe)  
    
    

    Das Risiko ist, dass wenn deine Abkuerzungen in 'eingabe' als gewollter Text vorkommen, diese ebenfalls uebersetzt werden.
    Beispiel:

    eingabe = "Mister Knister" // enthaelt zweimal 'ste' aus dem Beispielobjekt und wird somit zu wird zu MiSieben traege Eselr KniSieben traege Eselr

    Besser waere also ein eindeutiger Begrenzer, sowas wie {sdgh}, wenn du sicher sein kannst, dass dein Text niemals '{' und '}' enthaelt

    Gruss

    Dieter

    1. Hallo,

      Das Risiko ist, dass wenn deine Abkuerzungen in 'eingabe' als gewollter Text vorkommen, diese ebenfalls uebersetzt werden.
      Beispiel:

      eingabe = "Mister Knister" // enthaelt zweimal 'ste' aus dem Beispielobjekt und wird somit zu wird zu MiSieben traege Eselr KniSieben traege Eselr

      Besser waere also ein eindeutiger Begrenzer, sowas wie {sdgh}, wenn du sicher sein kannst, dass dein Text niemals '{' und '}' enthaelt

      Also wenn ich eine Abkürzung schreibe, dann meistens so.
      dima.  -> Das ist meine Abkürzung ...
      Syntax: [Leerzeichen][Abkürzung][Punkt]

      Und nach genau sowas würde ich suchen und ersetzten.

      MfG. Christoph Ludwig

      --
      Wo die Sprache aufhört, fängt die Musik an...
      Selfcode:  sh:( fo:| ch:} rl:( br:> n4:? ie:{ mo:) va:} js:| de:> zu:) fl:( ss:) ls:&
      Go to this
    2. Hallo Dieter,

      danke für Deinen Hinweis, jedoch sind Deine Bedenken zwar begründet, in meinem speziellen Fall jedoch nicht angebracht. Es geht bei mir um Abkürzungen wie cc und wr, welche jedoch immer gesondert stehen. Daher werde ich den die Abkürzungen mit einem 'wr ' oder 'cc ' nutzen.

      Gibt es noch eine Möglichkeit, dass Groß- und Kleinschreibung ignoriert wird? Sprich das egal ob CC oder Cc oder cC geschrieben wird, immer die selbe Ausgabe errichtet wird?

      Dankeschön

      PS: in dem von Dir erstellten Script sind zwei kleine Fehler. Sie das um Gottes Willen bitte nicht als Genörgel an. Ferner als kleine Korrektur, für diejenigen, welche Deinen Codeschnipsel verwenden wollen.

      1. bei der Aufzählung fehlt ein Komma hinter "Mit freundlichen Grüßen"
      2. hinter das alert() muss noch mit einem ";"

      Das Risiko ist, dass wenn deine Abkuerzungen in 'eingabe' als gewollter Text vorkommen, diese ebenfalls uebersetzt werden.
      Beispiel:

      eingabe = "Mister Knister" // enthaelt zweimal 'ste' aus dem Beispielobjekt und wird somit zu wird zu MiSieben traege Eselr KniSieben traege Eselr

      Besser waere also ein eindeutiger Begrenzer, sowas wie {sdgh}, wenn du sicher sein kannst, dass dein Text niemals '{' und '}' enthaelt

      1. @@Fridleif:

        nuqneH

        1. hinter das alert() muss noch mit einem ";"

        Muss was? Und nein, muss nicht.

        Qapla'

        --
        Bildung lässt sich nicht downloaden. (Günther Jauch)
      2. Gibt es noch eine Möglichkeit, dass Groß- und Kleinschreibung ignoriert wird?

        .replace(new RegExp(abkuerzung, "i"), verzeichnis[abkuerzung])

        Aber Achtung: Der String wird dann als Regulärer Ausdruck ausgewertet. Das heißt, dass gewisse Buchstaben eine besondere Bedeutung haben. Z.B. bedeutet ».« nicht einfach Punkt, sondern »ein beliebiges Zeichen«.

        In dem Fall müsstest du ein \ vor den . stellen, um es unschädlich zu machen und seine ursprüngliche Bedeutung zu bewahren. Dem \ muss man wiederum \voranstellen, damit es nicht als andere Escape-Sequenz angesehen wird:

        var verzeichnis = {
          "usw\." : "und so weiter"
        };

        Diese Ersetzung kann man natürlich auch automatisieren - wiederum durch einen regulären Ausdruck mit replace.

        Mathias

        1. Aber Achtung: Der String wird dann als Regulärer Ausdruck ausgewertet. Das heißt, dass gewisse Buchstaben eine besondere Bedeutung haben. Z.B. bedeutet ».« nicht einfach Punkt, sondern »ein beliebiges Zeichen«.

          In dem Fall müsstest du ein \ vor den . stellen, um es unschädlich zu machen und seine ursprüngliche Bedeutung zu bewahren. Dem \ muss man wiederum \voranstellen, damit es nicht als andere Escape-Sequenz angesehen wird:

          Ja leider. Perl hat dafür den \Q Operator, den JS nicht kennt. Sinnvoll ist darüber hinaus in dem Fall auch nach der Wortgrenze zu suchen, sonst ersetzt man u.U. mitten in einem Wort.

          Das sähe dann z.b. so aus:

          var str = 'Hier z.B. nach "sgdh" gesucht und durch "Sehr geehrte Damen und Herren, " ersetzt. Aber nicht: in sgdhxgx';  
          var rep = {  
          sgdh: 'Sehr geehrte Damen und Herren, '  
          };  
            
          for(var abk in rep) {  
           var reg = new RegExp('\\b' + abk +'\\b' , 'ig');  
          str = str.replace(reg, rep[abk]);  
          }  
          alert(str);  
          
          

          Struppi.

        1. bei der Aufzählung fehlt ein Komma hinter "Mit freundlichen Grüßen"
        2. hinter das alert() muss noch mit einem ";"

        Weisst Du, man schreibt hier so oft Antworten, die vom Fragesteller einfach nur konsumiert werden, da bin ganz froh, wenn jemand einen Fehler entdeckt, da weiss ich wenigstens, dass sich meine Muehe gelohnt hat.

        Uebrigens schreibst du Gunnar, dass du seine und meine Methode kombinieren wuerdest. Nur der Vollstaendigkeit halber:

        var foo = new Object(); // oder {}  
        foo['x'] = 'y';  
          
        var foo = {  
          x : 'y'  
        };  
          
        var foo = {} // oder new Object();  
        foo.x = 'y';
        

        sind genau dasselbe.

  2. @@Fridleif:

    nuqneH

    Ich gehe davon aus, dass es sich mit einem Array realisieren lässt.

    Mit einem „<http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays@title=assozitivem Array>“:

    var Abkürzungen = {}; // kurz für new Object()  
    Abkürzungen['sgdh'] = 'Sehr geehrte Damen und Herren,';  
    Abkürzungen['mfg'] = 'Mit freundlichen Grüßen';
    

    Qapla'

    --
    Bildung lässt sich nicht downloaden. (Günther Jauch)
    1. Mahal samryn mer Gunnar *zwinker*

      Danke für den Tip, ich habe Deine Weise, mit der von Dieter kombiniert.

      vielen Dank

      @@Fridleif:

      nuqneH

      »» Ich gehe davon aus, dass es sich mit einem Array realisieren lässt.

      Mit einem „<http://de.selfhtml.org/javascript/objekte/array.htm#assoziative_arrays@title=assozitivem Array>“:

      var Abkürzungen = {}; // kurz für new Object()

      Abkürzungen['sgdh'] = 'Sehr geehrte Damen und Herren,';
      Abkürzungen['mfg'] = 'Mit freundlichen Grüßen';

      
      >   
      > Qapla'