Wie würden Sie vorgehen, um den ersten Buchstaben jedes Wortes in einer Zeichenfolge zu sammeln, wie um eine Abkürzung zu erhalten?
Eingang: "Java Script Object Notation"
Ausgabe: "JSON"
Gerben Jacobs
Wie würden Sie vorgehen, um den ersten Buchstaben jedes Wortes in einer Zeichenfolge zu sammeln, wie um eine Abkürzung zu erhalten?
Eingang: "Java Script Object Notation"
Ausgabe: "JSON"
BotNet
Ich denke, was Sie suchen, ist das Akronym einer angegebenen Zeichenfolge.
var str = "Java Script Object Notation";
var matches = str.match(/\b(\w)/g); // ['J','S','O','N']
var acronym = matches.join(''); // JSON
console.log(acronym)
Notiz: dies schlägt bei Wörtern mit Bindestrich/Apostroph fehl Help-me I'm Dieing
wird sein HmImD
. Wenn Sie das nicht möchten, können Sie die Split auf Leerzeichen, nimm den ersten Buchstaben Ansatz könnte das sein, was Sie wollen.
Hier ist ein kurzes Beispiel dafür:
let str = "Java Script Object Notation";
let acronym = str.split(/\s/).reduce((response,word)=> response+=word.slice(0,1),'')
console.log(acronym);
@Armando: SO ist irgendwie komisch, wenn zwei Antworten schnell hintereinander gepostet werden.
– Umarmung
26. November 2011 um 16:51 Uhr
@StephanHoyer Richtig. Ich nehme an, Umlaute, Bindestriche, Apostrophe usw. – Zeichen, die wir als Teil eines Wortes und nicht als Wortgrenze betrachten.
– BotNet
14. Dezember 2016 um 3:40 Uhr
Dieser Code wandelt “Jean-Sébastien” (beachten Sie den Akzent) in “JSB” um. Wie bekomme ich “JS”?
– PierreB
15. Februar 2021 um 21:33 Uhr
seine Arbeit, aber warum “response+=word.slice(0,1)”? kann Bedarf “response + word.slice(0,1)” sein?
– Romanown
26. Oktober 2021 um 6:45 Uhr
Umarmung
Ich denke damit kannst du das machen
'Aa Bb'.match(/\b\w/g).join('')
Erläuterung: Erhalten Sie alle /g
die alphanumerischen Zeichen \w
die nach einem nicht-alphanumerischen Zeichen stehen (also: nach einer Wortgrenze \b
), legen Sie sie auf ein Array mit .match()
und füge alles zu einer einzigen Kette zusammen .join('')
Je nachdem, was Sie tun möchten, können Sie auch einfach alle Großbuchstaben auswählen:
'JavaScript Object Notation'.match(/[A-Z]/g).join('')
Ich denke, eine Regex ist für diese Situation übertrieben.
– JesseBuesking
26. November 2011 um 16:40 Uhr
@JesseB: Ich weiß nicht, die alternative Lösung mit Split ist ziemlich ausführlich und muss sich um mehrere Leerzeichen in Folge und andere Trennzeichen wie Punkte oder Kommas kümmern.
– Umarmung
26. November 2011 um 16:46 Uhr
@JesseB Nicht wirklich. Kommt darauf an, was man unter “Wort” versteht
– Aurelio DeRosa
26. November 2011 um 16:46 Uhr
@missingno Ich bevorzuge Ausführlichkeit, wenn sie leichter zu verstehen und zu pflegen ist; p Manche Leute verstehen Regexes einfach nicht, also kann es, obwohl es knapper ist, zu Verwirrung und Missbrauch führen. Bei der Handhabung anderer Trennzeichen stimme ich Ihnen jedoch zu.
– JesseBuesking
26. November 2011 um 16:52 Uhr
Einfachster Weg ohne Regex
var abbr = "Java Script Object Notation".split(' ').map(function(item){return item[0]}).join('');
Aaron Taddiken
Das geht ganz einfach mit ES6
string.split(' ').map(i => i.charAt(0)) //Inherit case of each letter
string.split(' ').map(i => i.charAt(0)).toUpperCase() //Uppercase each letter
string.split(' ').map(i => i.charAt(0)).toLowerCase() //lowercase each letter
Dies funktioniert NUR mit Leerzeichen oder was auch immer in der definiert ist .split(' ')
Methode
dh, .split(', ')
.split('; ')
etc.
string.split(' ') .map(i => i.charAt(0)) .toString() .toUpperCase().split(',')
Um die großartigen Beispiele zu ergänzen, könnten Sie es in ES6 so machen
const x = "Java Script Object Notation".split(' ').map(x => x[0]).join('');
console.log(x); // JSON
und das funktioniert auch, aber bitte ignoriere es, ich bin hier etwas verrückt geworden 🙂
const [j,s,o,n] = "Java Script Object Notation".split(' ').map(x => x[0]);
console.log(`${j}${s}${o}${n}`);
tomersss2
@BotNet-Fehler: Ich glaube, ich habe es gelöst, nachdem ich 3 Tage mit Tutorials zu regulären Ausdrücken qualvoll war:
==> Ich bin ein Tier
(verwendet, um m von I’m zu fangen) wegen der Wortgrenze scheint es für mich so zu funktionieren.
/(\s|^)([a-z])/gi
ipr101
Versuchen –
var text="";
var arr = "Java Script Object Notation".split(' ');
for(i=0;i<arr.length;i++) {
text += arr[i].substr(0,1)
}
alert(text);
Demo – http://jsfiddle.net/r2maQ/