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
lengthni[...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