Segmenter + Collator:切分文本 & 本地化排序
两个 API 都按「语言规则」处理字符串,远比 .split('') / < 直接比 code point 正确。Segmenter 把文本切成字素 / 词 / 句;Collator 按某语言习惯排序与查找。
1 · Segmenter:切成 grapheme / word / sentence
granularity 三档:grapheme(用户感知的「一个字符」,👨👩👧 是一个)、word(分词,中日泰无空格也能切、还标 isWordLike)、sentence(断句)。返回可迭代的 { segment, index, isWordLike }。
统计「字符数」的正确方式。'👨👩👧'.length 是 8(UTF-16 码元)、[...'👨👩👧'].length 是 5(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。