Intl.Segmenter
Intl.Segmenter
単語や見た目の 1 文字、文字単位で文字列を分割できる
#ロケール を考慮しつつ、指定された粒度で文字列を分割するための API 基本的な使い方
code:js
const segmenter = new Intl.Segmenter("ja-JP", {
// オプションを指定
});
コンストラクタでインスタンスを生成
第 1 引数: ロケール(ロケール識別子 or Intl.Locale オブジェクト)
第 2 引数: フォーマットのオプション
code:js
const segments = new Intl.Segmenter("ja-JP").segment("こんにちは、世界。");
生成したインスタンスには segment()メソッドがある
このメソッドに分割したい文字列を渡すと分割したイテレータが得られる
segment() メソッド
code:js
// Intl.Segments インスタンス
const segments = new Intl.Segmenter("ja-JP", { granularity: "word" }).segment("こんにちは、世界。");
文字列を指定された粒度で分割するためのメソッド
返り値は分割されたデータを Iterable なコレクションとして保持する Intl.Segments インスタンス
code:js
// [
// { "segment": "こんにちは", "index": 0, "input": "こんにちは、世界。", "isWordLike": true},
// { "segment": "、", "index": 5, "input": "こんにちは、世界。", "isWordLike": false},
// { "segment": "世界", "index": 6, "input": "こんにちは、世界。", "isWordLike": true},
// { "segment": "。", "index": 8, "input": "こんにちは、世界。", "isWordLike": false}
// ]
各セグメントのデータは以下のプロパティを持つオブジェクトとして表現される
segment: 分割された文字列
index: 元の文字列におけるセグメントの開始位置
input: 元の文字列
isWordLike: 分割された文字列がワードかどうかの真偽値
(granularity オプションが "word" のときのみ)
Intl.Segments インスタンスには containing() が生えている
指定された位置に含まれるセグメントを取得できる
code:js
const segments = new Intl.Segmenter("ja-JP", { granularity: "word" }).segment("こんにちは、世界。);
console.log(segments.containing(3));
// { segment: "こんにちは", index: 0, input: "こんにちは、世界。", isWordLike: true }
console.log(segments.containing(7));
// { segment: "世界", index: 6, input: "こんにちは、世界。", isWordLike: true }
console.log(segments.containing(20)); // undefined
granularity オプション
granularity は分割の粒度を決めるオプション
"grapheme": 「見た目上の 1 文字(カーソルが 1 つ動く分)」(grapheme) "word": 「単語 」
"sentence": 「文」