此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。

View in English Always switch to English

Intl.Segmenter

基线 2024
最近可用

自 April 2024 起,此特性已在最新浏览器中得到支持。但在较旧的设备或浏览器中可能无法运行。

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);
// 期望输出:"Que"

console.log(iterator.next().value.segment);
// 期望输出:" "

构造函数

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(" "));
// ['吾輩は猫である。名前はたぬき。']
// 这两个句子并没有得到正确的分割。
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},
// 等等
// ]

规范

规范
ECMAScript® 2027 Internationalization API Specification
# segmenter-objects

浏览器兼容性

参见