Start · Sprachen · JavaScript · Referenz · Intl.Segmenter

Intl.Segmenter

Klasse

Ermöglicht lokalisierungssensitive Textsegmentierung und extrahiert bedeutungsvolle Einheiten (Grapheme, Wörter oder Sätze) aus einem String.

seit JavaScript ES2022 / Baseline: alle modernen Browser Kategorie: core

Signatur

class Intl.Segmenter

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; isWordLike zeigt 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:
  • granularity ('grapheme' | 'word' | 'sentence', Standard: 'grapheme'): Legt die Segmentierungseinheit fest.
  • localeMatcher ('best fit' | 'lookup', Standard: 'best fit'): Algorithmus zur Locale-Auswahl.

Rückgabewert

Typ
Intl.Segmenter
Beschreibung
Eine neue 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);
  }
}
Hallo schöne Welt

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);
naive Länge: 13 korrekte Graphem-Anzahl: 2 Erstes Graphem: 👨‍👩‍👧‍👦

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.