← Intl · 浏览器内置的本地化引擎 / Segmenter + Collator:切分文本 & 本地化排序 待审核 9 / 9
Segmenter + Collator · 切分 & 排序

Segmenter + Collator:切分文本 & 本地化排序

两个 API 都按「语言规则」处理字符串,远比 .split('') / < 直接比 code point 正确。Segmenter 把文本切成字素 / 词 / 句;Collator 按某语言习惯排序与查找。

1 · Segmenter:切成 grapheme / word / sentence

granularity 三档:grapheme(用户感知的「一个字符」,👨‍👩‍👧 是一个)、word(分词,中日泰无空格也能切、还标 isWordLike)、sentence(断句)。返回可迭代的 { segment, index, isWordLike }

统计「字符数」的正确方式。'👨‍👩‍👧'.length8(UTF-16 码元)、[...'👨‍👩‍👧'].length5(code point)、而按 grapheme 切才是 1(人眼看到的一个字符)。要截断/光标移动/计数,用 grapheme segmenter。(emoji 的 code point 拆解细节见 regex 系列。)

2 · Collator:按语言习惯排序

直接 arr.sort() 是按 UTF-16 code point 比——会把大写排在小写前、把 file10 排在 file2 前、还乱排带重音的字母。Collator.compare 按 locale 的排序权重来:

**查找用 usage:'search' + sensitivity:'base'。**想做「忽略大小写与重音的包含匹配」,建一个 search collator 用 compare(a,b)===0 判等,比手写 .toLowerCase() + 去重音可靠。排序时把 collator 建一次传给 .sort(collator.compare)——它比每次比较都新建快得多。

numeric:true 适合文件名排序:img2 < img10 而不是字典序的 img10 < img2。德语 ä 在标准序约等于 a、电话簿序约等于 ae;瑞典语把 å/ä/ö 排到字母表最后——同样的字母,排序完全看 locale。