Signatur
Beschreibung
Segments ist kein direkt instanziierbares Objekt, sondern wird ausschließlich als Rückgabewert von Intl.Segmenter.prototype.segment(string) zurückgegeben. Es repräsentiert die lokalisierte Aufteilung eines Textstrings in Segmente – je nach Konfiguration des Intl.Segmenter in Graphem-Cluster (einzelne wahrgenommene Zeichen), Wörter oder Sätze.
Das Segments-Objekt ist iterable: Es implementiert das Iterator-Protokoll, sodass man es direkt in for...of-Schleifen verwenden oder mit dem Spread-Operator ([...segments]) in ein Array umwandeln kann. Jedes iterierte Element ist ein einfaches Objekt mit den Eigenschaften segment (der Textinhalt), index (Startposition im Originalstring) und – bei Wort-Segmentierung – isWordLike (ob das Segment ein Wort ist).
Zusätzlich bietet Segments die Methode containing(index), mit der man das Segment an einer bestimmten Position im Originalstring direkt abrufen kann, ohne über alle Segmente iterieren zu müssen. Das ist besonders performant bei langen Texten.
Typische Einsatzgebiete sind die korrekte Zeichenzählung in Unicode-Texten (Emoji, zusammengesetzte Zeichen), Cursor-Navigation, Worttrennungen in Texteditoren sowie die satzweise Verarbeitung natürlichsprachlicher Inhalte unter Berücksichtigung von Sprach- und Lokalisierungsregeln.
Rückgabewert
Segments-Objekte werden nicht direkt konstruiert; sie werden von Intl.Segmenter.prototype.segment() zurückgegeben.Beispiele
Wörter eines deutschen Texts segmentieren
const segmenter = new Intl.Segmenter('de', { granularity: 'word' });
const text = 'Hallo Welt! Schön, dich zu sehen.';
const segments = segmenter.segment(text);
const words = [...segments]
.filter(seg => seg.isWordLike)
.map(seg => seg.segment);
console.log(words);
Einzelne Graphem-Cluster zählen (Emoji-sicher)
const segmenter = new Intl.Segmenter('en', { granularity: 'grapheme' });
const text = '👨👩👧👦café';
const segments = segmenter.segment(text);
// Korrekte Zeichenzählung (nicht text.length!)
const count = [...segments].length;
console.log('Länge (Grapheme):', count);
console.log('Länge (String):', text.length);
// Segment an Position 5 abrufen
const seg = segments.containing(5);
console.log('Segment bei Index 5:', seg);
Sätze eines Texts iterieren
const segmenter = new Intl.Segmenter('de', { granularity: 'sentence' });
const text = 'Das ist Satz eins. Das ist Satz zwei! Und der dritte?';
for (const { segment, index } of segmenter.segment(text)) {
console.log(`[${index}] "${segment.trim()}"`);
}
// Wichtig · Fallstricke
Browser-Kompatibilität: Intl.Segmenter und damit Segments sind seit Chrome 87, Edge 87, Firefox 125 und Safari 14.1 verfügbar. In älteren Umgebungen (insbesondere Node.js vor v16 ohne ICU-Vollunterstützung) kann Intl.Segmenter fehlen – ggf. Verfügbarkeit prüfen mit typeof Intl.Segmenter !== 'undefined'.
Performance: Das Segments-Objekt wertet Segmente lazy aus – die tatsächliche Segmentierung erfolgt erst beim Iterieren. Die Methode containing(index) ermöglicht gezielten Zugriff ohne vollständige Iteration, was bei großen Texten deutlich performanter ist.
Granularität: Die Wort-Segmentierung ist sprachabhängig. Für Sprachen ohne Leerzeichen (z. B. Japanisch, Chinesisch) liefert granularity: 'word' andere Ergebnisse als eine naive Aufteilung nach Leerzeichen. Stets eine passende locale angeben.