Start · Sprachen · JavaScript · Referenz · new Intl.Segmenter()

new Intl.Segmenter()

Methode

Erzeugt ein <code>Intl.Segmenter</code>-Objekt, das Text sprachabhängig in Grapheme (sichtbare Zeichen), Wörter oder Sätze zerlegt.

seit JavaScript ES2022 (Intl); Baseline seit 2024 (Firefox 125+, C Kategorie: method-property

Signatur

new Intl.Segmenter(locales, options)

Beschreibung

Der Konstruktor Intl.Segmenter() erstellt einen Segmentierer, der Zeichenketten nach den Unicode-Regeln (UAX #29) und den Konventionen einer bestimmten Sprache in sinnvolle Einheiten zerlegt. Die eigentliche Zerlegung erfolgt über die Methode segment(), die ein iterierbares Segments-Objekt liefert.

Einsatzgebiete sind vor allem Fälle, in denen string.length, split('') oder reguläre Ausdrücke versagen: das korrekte Zählen von Zeichen bei Emojis und kombinierten Akzenten (granularity: "grapheme"), das Zählen und Extrahieren von Wörtern in Sprachen ohne Leerzeichen wie Japanisch, Chinesisch oder Thai ("word") sowie die Satzerkennung, etwa für Textvorschauen ("sentence").

Den Konstruktor muss man mit new aufrufen, sonst wird ein TypeError geworfen. Da das Anlegen vergleichsweise viel kostet, sollte man eine Instanz einmal erzeugen und dann für viele Texte wiederverwenden.

Parameter

Name Typ Default Beschreibung
$locales string | string[] | Intl.Locale | undefined Standard-Locale der Laufzeitumgebung BCP-47-Sprachkennung (z. B. "de", "ja-JP") oder ein Array davon. Die Sprache beeinflusst vor allem die Wort- und Satztrennung.
$options object {} Konfigurationsobjekt mit folgenden Eigenschaften:
  • granularity: "grapheme" (Standard), "word" oder "sentence", also die Art der Segmente.
  • localeMatcher: "best fit" (Standard) oder "lookup", der Algorithmus für die Auswahl der Locale.

Rückgabewert

Typ
Intl.Segmenter
Beschreibung
Eine neue Intl.Segmenter-Instanz mit den Methoden segment() und resolvedOptions().

Beispiele

Sichtbare Zeichen korrekt zählen (Emojis)

const text = 'Hi 👋🏽 Familie: 👨‍👩‍👧';

const segmenter = new Intl.Segmenter('de', { granularity: 'grapheme' });
const anzahl = [...segmenter.segment(text)].length;

console.log(text.length); // UTF-16-Codeeinheiten
console.log(anzahl);      // wahrgenommene Zeichen
23 14

Wörter zählen, ohne Satzzeichen mitzuzählen

const wortSegmenter = new Intl.Segmenter('de', { granularity: 'word' });

const zaehleWoerter = (text) =>
  [...wortSegmenter.segment(text)].filter((s) => s.isWordLike).length;

console.log(zaehleWoerter('Hallo Welt! Wie geht es dir?'));
6

Japanischen Text in Wörter zerlegen

const ja = new Intl.Segmenter('ja-JP', { granularity: 'word' });

const woerter = [...ja.segment('吾輩は猫である。')]
  .filter((s) => s.isWordLike)
  .map((s) => s.segment);

console.log(woerter);
[ '吾輩', 'は', '猫', 'で', 'ある' ] // genaue Aufteilung je nach Engine

Ersten Satz als Vorschau extrahieren

const saetze = new Intl.Segmenter('de', { granularity: 'sentence' });

const vorschau = (text) => {
  const [erster] = saetze.segment(text);
  return erster ? erster.segment.trim() : '';
};

console.log(vorschau('Dr. Müller kommt heute. Bitte pünktlich sein!'));
console.log(saetze.resolvedOptions());
Dr. Müller kommt heute. // Abkürzungen werden je nach Engine unterschiedlich behandelt { locale: 'de', granularity: 'sentence' }

// Wichtig · Fallstricke

  • Aufruf nur mit new: Ohne new wird ein TypeError geworfen. Ein ungültiger granularity-Wert löst einen RangeError aus.
  • Browser-Unterstützung: Chrome/Edge 87+, Safari 14.1+ und Node.js 16+ unterstützen den Konstruktor. Firefox erst ab Version 125 (2024). Für ältere Umgebungen vorher mit 'Segmenter' in Intl prüfen oder ein Polyfill einsetzen (z. B. von FormatJS).
  • Ergebnisse unterscheiden sich je nach Engine: Wort- und Satzgrenzen hängen von den ICU-Daten der jeweiligen Engine ab, besonders bei CJK-Sprachen und Abkürzungen wie „Dr.“. Tests sollten sich deshalb nicht auf die exakte Aufteilung verlassen.
  • Performance: Instanzen wiederverwenden statt pro Aufruf neu erzeugen. segment() arbeitet verzögert: Mit for...of oder containing(index) muss man nicht den ganzen Text auf einmal zerlegen.
  • Bei granularity: "word" zählen auch Leerzeichen und Satzzeichen als Segmente. Echte Wörter findet man über isWordLike.