Anfangsbuchstaben Wörter per RegEx
klml
- javascript
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
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
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
@@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'
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
@@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'
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