klml: Anfangsbuchstaben Wörter per RegEx

Hi allerseits,

ich will aus einem Satz eine Abkürzung anhand der jeweiligen Anfangsbuchstaben machen. Das Trennzeichen wäre also das Leerzeichen.

Aus "Anfangsbuchstaben Wörter per RegEx" würde dann "AWpR".

Leider geht in JS  RegEx der lookbehind nicht, daher probiere ich den lookahead.

  autolemmas = dentline.match(/\s+(?=\S+)/gi);  
  autolemma = autolemmas.join("_") ; // "_" nur um Ergebniss überhaupt was 
~~~zu sehen  
  
mit einer Schleife klappt das Prima  
…  
~~~javascript
      var autolemma = ""; // to define as string  
      dentlinewords = dentline.split(' ');  
      for (i=0 ; i<dentlinewords.length ; i++) {  
         autolemma =  autolemma + dentlinewords[i][0] ;  
      }  

~~~…  
  
Aber ist das elegant?  
  
merci & greetz  
klml  

  1. gruss klml,

    ich will aus einem Satz eine Abkürzung anhand der jeweiligen
    Anfangsbuchstaben machen. ...
    ...
    Aus "Anfangsbuchstaben Wörter per RegEx" würde dann "AWpR".

    mit einer Schleife klappt das Prima

    var autolemma = ""; // to define as string

    dentlinewords = dentline.split(' ');
    for (i=0 ; i<dentlinewords.length ; i++) {
      autolemma =  autolemma + dentlinewords[i][0] ;
    }

    
    >   
    > Aber ist das elegant?  
      
    ja, denn es ist lesbar und auf alle faelle schneller als `[RegExp]`{:.language-javascript}-konfu.  
      
    mit JavaScript 1.8 wurde von mozilla.org u.a. `[link:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/Reduce@title=[reduce\]]`{:.language-javascript} eingefuehrt.  
    mit ECMAScript 5 wird es dann auch in anderen browsern implementiert  
    sein bzw. steht dort schon zur verfuegung (z.b. im aktuellen chrome).  
      
    Dein bsp. koennte dann auch so aussehen (copy+paste in die [jconsole](http://jconsole.com/)):  
      
    ~~~javascript
    var copy = "Anfangsbuchstaben  Wörter  per RegEx";  
    var wordList = copy.split(/\s+/);  
    var autolemma = wordList.shift();  
      
    autolemma = wordList.reduce((function (previous, current) {  
      return (previous + current.charAt(0));  
    }), autolemma.charAt(0));
    

    so long - peterS. - pseliger@gmx.net

    --
    »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
    Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
    ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]
    1. hallo again klml,

      Dein bsp. koennte dann auch so aussehen (copy+paste in die jconsole):

      var copy = "Anfangsbuchstaben  Wörter  per RegEx";

      var wordList = copy.split(/\s+/);
      var autolemma = wordList.shift();

      autolemma = wordList.reduce((function (previous, current) {
        return (previous + current.charAt(0));
      }), autolemma.charAt(0));

        
      das ganze laesst sich auch kuerzer schreiben:  
        
      ~~~javascript
      var copy = "Anfangsbuchstaben  Wörter  per RegEx";  
      var autolemma = copy.split(/\s+/).reduce((function (previous, current) {  
        return (previous + current.charAt(0));  
      }), "");  
      print(autolemma);
      

      so long - peterS. - pseliger@gmx.net

      --
      »Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
      Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
      ie:( fl:) br:> va:( ls:& fo:) rl:) n3;} n4:} ss:} de:µ js:} mo:? zu:]
  2. @@klml:

    nuqneH

    Leider geht in JS  RegEx der lookbehind nicht, daher probiere ich den lookahead.

    Was geht, wäre, die Leerzeichen erstmal mitzunehmen und dann nachträglich zu entfernen:

    var autolemma = dentline.match(/(?:^|\s)\S/g).join('').replace(/\s/g, '');

    Sinnvoll ist das natürlich nicht.

    Qapla'

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

    erst mal vielen Dank für das feedback. Ich hab mir jetzt alle drei Lösungen angeschaut und werde vermutlich Gunnars regexp nutzen.

    Zwar wäre das mit [reduce] genau das was ich brauche, aber es ist halt noch nicht so verbreitet. Und meine Schleife hatte noch andere Probleme.

    Ich brauch in dem Projekt eh noch mehr regex

    also noch mal Danke für die schneller Info & greetz
    klml

    1. @@klml:

      nuqneH

      werde vermutlich Gunnars regexp nutzen.

      Der entscheidende Satz meines Postings war: „Sinnvoll ist das natürlich nicht.“

      Und meine Schleife […]

      Damit warst du goldrichtig.

      […] hatte noch andere Probleme.

      ?? Welche denn? Dann löse diese, anstatt dir noch andere Probleme aufzuhalsen.

      Qapla'

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

        Der entscheidende Satz meines Postings war: „Sinnvoll ist das natürlich nicht.“

        darum hab ich ja von meiner Abwägung berichtet..

        Und meine Schleife […]

        Damit warst du goldrichtig.

        […] hatte noch andere Probleme.

        ?? Welche denn? Dann löse diese,

        sie greift auch auf Leerzeichen am Zeilenende (hat man ja im Schreibfluss) und spuckt dann ein 'undefined' aus.

        Ja man kann das lösen, werde ich auch sicherlich mal, die Schleife liegt noch auskommentiert griffbereit.

        Aber eigentlich greife ich zu regexp, da ich noch mehr Text umformen muss.

        Ich habe mir dazu den mediawiki Parser¹ angeschaut und da wird das meiste markup auch mit regexp ausgelesen.

        So suche ich im letzten Wort nach einem oder mehr '!', die Anzahl der '!' ergibt die Priorität, eine ? setzte den Staus Frage, ein 'fyi' nen anderen.
        Und auch Kategorien und tags hol ich mir aus dem Text

        Das geht dann mit regexp sehr angenehm.

        Außerdem schlägt die Funktion 'autolemma' nur dem User ein Lemma (als ein alphanummID) vor, das er selber in einem input anfassen kann.

        Also wenn die Funktion mal nicht funktioniert, dann ist das nicht programmabbrechend.

        Aber Danke für die Einschätzung, ich werd an Dich denken wenn ich zu meiner Schleife zurück gehe.

        greetz
        klml

        anstatt dir noch andere Probleme aufzuhalsen.

        ha das ist ja echt cool;)

        1 http://www.mediawiki.org/wiki/Parser.php