Intl.Segmenter

new Intl.Segmenter(locale, { granularity }).segment(text)

Découpe un texte selon les règles d’Unicode et de la langue : en caractères tels que les voit un humain (y compris les emoji composés), en mots ou en phrases.

Paramètres

  • granularity – 'grapheme' (caractères, par défaut), 'word' (mots), 'sentence' (phrases).

Valeur de retour

Un objet ; segment() renvoie des parties itérables avec les propriétés segment, index et, pour les mots, isWordLike.

Exemples

const words = new Intl.Segmenter('fr', { granularity: 'word' });
const text = 'Bonjour, comment ça va ? Chez moi, tout va bien.';
console.log([...words.segment(text)].filter((s) => s.isWordLike).map((s) => s.segment));
const sentences = new Intl.Segmenter('fr', { granularity: 'sentence' });
console.log([...sentences.segment(text)].map((s) => s.segment.trim()));
const family = '\u{1F468}\u{200D}\u{1F469}\u{200D}\u{1F467}';
console.log(family.length, [...family].length, [...new Intl.Segmenter('fr').segment(family)].length);

Résultat :

[ 'Bonjour', 'comment', 'ça', 'va', 'Chez', 'moi', 'tout', 'va', 'bien' ]
[ 'Bonjour, comment ça va ?', 'Chez moi, tout va bien.' ]
8 5 1

Points d’attention

  • C’est une interface plus récente – Firefox la prend en charge depuis la version 125 (2024).
  • Le nombre de caractères tel que le lecteur les voit (par exemple pour limiter la longueur des messages) n’est donné que par le découpage en graphèmes – ni length ni [...text] ne gèrent les emoji composés.

Prise en charge par les navigateurs

Baseline – nouvellement disponible : dans tous les navigateurs courants depuis avril 2024 ; les versions plus anciennes des navigateurs ne le prennent pas en charge. Depuis la version : Chrome 87, Firefox 125, Safari 14.1 ; Node.js 16.0.0. État : octobre 2026 (MDN browser-compat-data).

Voir aussi :
String.prototype.length
String.prototype.split()
Intl.Collator