Signatur
Beschreibung
Intl.Segmenter zerlegt einen Text entsprechend den Regeln einer bestimmten Sprache in sinnvolle Segmente. Je nach gewählter Granularität (grapheme, word oder sentence) liefert er Unicode-konforme Grenzen zwischen Zeichen, Wörtern oder Sätzen – auch für Sprachen ohne Leerzeichen als Trennzeichen (z. B. Japanisch oder Chinesisch).
Ein Intl.Segmenter-Objekt wird mit einem Locale-Tag und optional einem Optionsobjekt erstellt. Anschließend kann man mit der Methode segment(text) ein iterierbares Segments-Objekt erhalten, das alle Segmente als Objekte mit den Eigenschaften segment, index, input und ggf. isWordLike enthält.
Im Vergleich zu naiven String-Splits mit .split(' ') oder Regex berücksichtigt Intl.Segmenter Unicode-Sonderregeln: kombinierte Emoji-Sequenzen (Graphem-Cluster), zusammengesetzte Wörter und sprachspezifische Satzgrenzen werden korrekt erkannt. Das ist besonders wichtig bei mehrsprachigen Anwendungen, Texteditoren, Suchfunktionen und der barrierefreien Verarbeitung von Benutzereingaben.
- Granularität
grapheme: Teilt nach visuell wahrnehmbaren Zeichen (inkl. kombinierter Emoji). - Granularität
word: Teilt nach Wörtern;isWordLikezeigt an, ob ein Segment ein echtes Wort ist. - Granularität
sentence: Teilt nach Sätzen gemäß Unicode-Satzgrenzenregeln.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locales | string|Array<string> | Systemsprache | Ein BCP-47-Sprach-Tag oder ein Array davon (z. B. 'de', 'ja', 'en-US'). Bestimmt, welche sprachspezifischen Segmentierungsregeln angewendet werden. |
| $options | object | {} | Ein Optionsobjekt mit folgenden Eigenschaften:
|
Rückgabewert
Intl.Segmenter-Instanz, die mit der Methode segment() aufgerufen werden kann, um einen Text zu segmentieren.Beispiele
Wörter in einem deutschen Text segmentieren
const segmenter = new Intl.Segmenter('de', { granularity: 'word' });
const text = 'Hallo, schöne Welt!';
const segments = segmenter.segment(text);
for (const seg of segments) {
if (seg.isWordLike) {
console.log(seg.segment);
}
}
Graphem-Cluster in Emoji-Strings korrekt zählen
// Naiver split gibt falsche Länge zurück
const emoji = '👨👩👧👦🏳️🌈';
console.log('naive Länge:', [...emoji].length); // falsch, da Surrogate
const graphemeSegmenter = new Intl.Segmenter('en', { granularity: 'grapheme' });
const graphemes = [...graphemeSegmenter.segment(emoji)];
console.log('korrekte Graphem-Anzahl:', graphemes.length);
console.log('Erstes Graphem:', graphemes[0].segment);
Japanischen Text in Wörter segmentieren (ohne Leerzeichen)
const jaSegmenter = new Intl.Segmenter('ja', { granularity: 'word' });
const jaText = '日本語のテキストを分割します。';
const words = [...jaSegmenter.segment(jaText)]
.filter(s => s.isWordLike)
.map(s => s.segment);
console.log(words);
// Wichtig · Fallstricke
Browser-Kompatibilität: Intl.Segmenter ist seit 2022 in allen modernen Browsern verfügbar (Chrome 87+, Firefox 125+, Safari 14.1+, Edge 87+). In Node.js ist die API ab Version 16 mit der ICU-Vollbibliothek (--with-intl=full-icu) verfügbar; kleinere ICU-Builds können die Funktionalität einschränken.
Leistung: Das Erstellen eines neuen Intl.Segmenter-Objekts ist relativ teuer. Für wiederholte Verwendung sollte die Instanz außerhalb von Schleifen oder Render-Zyklen erstellt und wiederverwendet werden.
Granularität word: Das Feld isWordLike ist nur bei granularity: 'word' vorhanden. Satzzeichen, Leerzeichen und andere Trennzeichen haben isWordLike: false.
Kein Polyfill im alten Standard: String.prototype.split oder Regex können Intl.Segmenter nicht vollständig ersetzen; für Legacy-Umgebungen empfiehlt sich die Bibliothek tc39-proposal-intl-segmenter-polyfill.