Intl.Segmenter()

Baseline 2024

Newly available

Since April 2024, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

Intl.Segmenter() 构造函数会创建一个 Intl.Segmenter 对象,该对象支持语言敏感的文本分割。

尝试一下

语法

js
new Intl.Segmenter()
new Intl.Segmenter(locales)
new Intl.Segmenter(locales, options)

备注: Intl.Segmenter() 只能通过 new 操作符来构建。如果尝试不使用 new 操作符来构建,将会抛出一个 TypeError 错误。

参数

locales 可选

带有 BCP 47 语言区域标记的一个字符串,或者一个这样的字符串数组。对于 locales 参数的一般形式和解释,参见语言区域识别和判定

options 可选

带有部分或全部以下属性的一个对象:

granularity 可选

字符串。可选值如下:

"grapheme"(默认)

根据语言区域,将输入值按字(用户可以感知的字符)划分边界。

"word"

根据语言区域,将输入值按词划分边界。

"sentence"

根据语言区域,将输入值按句划分边界。

localeMatcher 可选

将要使用的语言区域匹配算法。可选值如下:

"best fit"(默认)

运行时可能会选择一个可能比查找算法的结果更加合适的语言区域。

"lookup"

使用 BCP 47 查找算法来从 locales 参数中选择语言区域。对于 locales 参数中的每一个语言区域,会返回第一个运行时支持的语言区域(有可能会移除用于限制区域的子标记,来找到一个支持的语言区域。换句话说,如果运行时支持 "de" 但不支持 "de-CH",用户传入的 "de-CH" 可能就会以 "de" 为结果进行使用)。

返回值

一个新的 Intl.Segmenter 实例。

示例

基础用法

下面的例子展示了如何计算在一个日语字符串中使用了多少个词汇(使用 String 提供的分割方法将得到错误的结果)。

js
const text = "吾輩は猫である。名前はたぬき。";
const japaneseSegmenter = new Intl.Segmenter("ja-JP", { granularity: "word" });
console.log(
  [...japaneseSegmenter.segment(text)].filter((segment) => segment.isWordLike)
    .length,
);
// 8,文本将会分割为 '吾輩'|'は'|'猫'|'で'|'ある'|'。'|'名前'|'は'|'たぬき'|'。'

规范

Specification
ECMAScript Internationalization API Specification
# sec-intl-segmenter-constructor

浏览器兼容性

BCD tables only load in the browser