Intl.Segmenter

Baseline 2024
新推出

自 ⁨2024 年 4 月⁩ 起,此功能可在最新的设备和浏览器版本中运行。此功能可能不适用于较旧的设备或浏览器。

Intl.Segmenter 对象支持区分区域的文本分段,使您能够从字符串中获取有意义的项(字素、单词或句子)。

试一试

const segmenterFr = new Intl.Segmenter("fr", { granularity: "word" });
const string = "Que ma joie demeure";

const iterator = segmenterFr.segment(string)[Symbol.iterator]();

console.log(iterator.next().value.segment);
// Expected output: 'Que'

console.log(iterator.next().value.segment);
// Expected output: ' '

构造函数

Intl.Segmenter()

创建一个新的 Intl.Segmenter 对象。

静态方法

Intl.Segmenter.supportedLocalesOf()

返回一个数组,其中包含提供的区域设置中受支持的那些区域设置,而无需回退到运行时默认区域设置。

实例属性

这些属性定义在 Intl.Segmenter.prototype 上,并由所有 Intl.Segmenter 实例共享。

Intl.Segmenter.prototype.constructor

创建实例对象的构造函数。对于 Intl.Segmenter 实例,初始值是 Intl.Segmenter 构造函数。

Intl.Segmenter.prototype[Symbol.toStringTag]

[Symbol.toStringTag] 属性的初始值是字符串 "Intl.Segmenter"。此属性用于 Object.prototype.toString()

实例方法

Intl.Segmenter.prototype.resolvedOptions()

返回一个新对象,其中包含反映此 Intl.Segmenter 对象初始化期间计算出的区域和粒度选项的属性。

Intl.Segmenter.prototype.segment()

返回一个新的可迭代 Segments 实例,该实例根据此 Intl.Segmenter 实例的区域和粒度表示字符串的片段。

示例

基本用法及与 String.prototype.split() 的区别

如果我们使用 String.prototype.split(" ") 来分割文本中的单词,那么如果文本的区域在单词之间不使用空格(如日语、中文、泰语、老挝语、高棉语、缅甸语等),我们将无法获得正确的结果。

js
const str = "吾輩は猫である。名前はたぬき。";
console.table(str.split(" "));
// ['吾輩は猫である。名前はたぬき。']
// The two sentences are not correctly segmented.
js
const str = "吾輩は猫である。名前はたぬき。";
const segmenterJa = new Intl.Segmenter("ja-JP", { granularity: "word" });

const segments = segmenterJa.segment(str);
console.table(Array.from(segments));
// [{segment: '吾輩', index: 0, input: '吾輩は猫である。名前はたぬき。', isWordLike: true},
// etc.
// ]

规范

规范
ECMAScript® 2026 国际化 API 规范
# segmenter-objects

浏览器兼容性

另见