概要
「が」を「か゛」のように、ひらがなの濁点・半濁点を分離する処理が必要になったことは、ありますか?(私はありました
今回は、作成したJavaScriptの関数
を紹介します。
作成した関数
まずは、結果から説明します。
下記が完成したJavaScriptの関数
です。
ひらがなの対応表を作成するのもよかったのですが、コードが肥大化してしまうため、normalize()
やencodeURI()
を用いて処理を組みました。
内容としては、ひらがな1文字を引数を渡して、濁点・半濁点の文字だったら分離し文字列を返す処理になっています。
関数
let dakutenSeparation = (kana) => {
const normalizeKana = kana.normalize('NFD');
const encodeStr = encodeURI(normalizeKana);
if (encodeStr.match(/%E3%82%99$/g)) {
return normalizeKana[0] + "゛";
} else if (encodeStr.match(/%E3%82%9A$/g)) {
return normalizeKana[0] + "゜";
} else {
return kana;
}
}
実際の動作
コード解説
ひらがなの正規化
const normalizeKana = kana.normalize('NFD');
normalize()
を使用し、ひらがなのUnicode正規化形式
を取得しています。
この後の処理へ渡すための準備となります。
エンコード
const encodeStr = encodeURI(normalizeKana);
encodeURI()
を使用しひらがなをエンコードしています。
実際にエンコードすると以下のような文字列に代わります。
'が' → '%E3%81%8B%E3%82%99'
エンコードされた末尾の文字列の判定
encodeStr.match(/%E3%82%99$/g);
encodeStr.match(/%E3%82%9A$/g);
IF文の判定処理で、謎の文字列で判定しています。
この文字列は、エンコード結果を確認すると濁点と半濁点なことが分かるので、末尾の文字列で判定を行っています。
'か' → '%E3%81%8B'
'が' → '%E3%81%8B%E3%82%99'
'く' → '%E3%81%8F'
'ぐ' → '%E3%81%8F%E3%82%99'
'は' → '%E3%81%AF'
'ぱ' → '%E3%81%AF%E3%82%9A'
'ひ' → '%E3%81%B2'
'ぴ' → '%E3%81%B2%E3%82%9A'
結果を返す
return normalizeKana[0] + "゜";
normalizeKana[0]
を取得すると、濁点が取れたひらがなが取得できます。
normalizeKana[1]
を取得しても、想定した形の濁点・半濁点が入っていないため、判定した内容で直接濁点半濁点の文字を指定して、結合しています。
まとめ
分離した濁点・半濁点を結合する処理は、PDFの解析などするときはよくありますが、分離したいことは多くはないと思われます。
そのため、少しでも困った人の参考になればと思い紹介しました。
ここまで読んでいただきありがとうございました。