本文がちょっと込み入っているので、まずは結果から書きます
今回書いた漢字を抽出する正規表現はこれ
/[々〆〇〻㐂-頻]+/g
調べてみると漢字の範囲は奥が深い
ひらがなやカタカナのように「ここからここまで」という始まりと終わりの文字がよくわからない
ひらがな:「あ」〜「ん」
カタカナ:「ア」〜「ン」
漢字:「?」〜「?」
今回調べて知ったこと・わかったこと等
- 常用漢字やJIS第1水準〜第4水準の漢字を文化庁のホームページやwikipediaで知った
(なんとなく知ってはいたが改めて調べて知った) - Unicodeは世界中の文字を1文字2バイトで65536字で表そうとしていた
- でも65536字では足りないことに気づいた
- 65536字では足りないので4バイトで1文字を表すサロゲートペアが作られた
- 常用漢字の中で唯一のサロゲートペアは「𠮟」
- ちなみに別の文字の「叱」は常用漢字ではないがJIS第1水準漢字
- 今回書いた [㐂-頻] はJIS第1水準〜第4水準の漢字だけを絞っているわけではない
- それ以外の漢字も範囲に含まれる
- この範囲は個人的に絞ったものなので一般的ではない
今回書いた正規表現で一致させたい漢字
- 㐂-頻の範囲に含まれるすべての漢字
- 注意点としてはJIS第1水準〜第4水準の漢字だけではないということ
- JIS第1水準〜第4水準の漢字を数値に置き換えて昇順に並び替えると先頭が 㐂 で末尾が 頻 ですが、その範囲内には第1〜第4に含まれない漢字も含まれる
- サロゲートペアも含まれる
- 々:上記の範囲に含まれないため直接追加
- 〆:「しめ」「閉め」「締め」「絞め」「占め」などを表す
- 〇:漢字のゼロ
- 〻:現在は「々」で代用されることもある(上字の訓を繰り返す)
※JIS第1水準〜第4水準の漢字だけを抽出するにはこの正規表現では不十分です
Unicode 10.0 Character Code Charts
http://www.unicode.org/charts/ を見ると
2018/01/29現在以下のような種類があり今後ExtensionG以降も増えそう
- CJK Unified Ideographs (Han) Range: 4E00–9FEA 統一漢字
- CJK Extension-A Range: 3400–4DB5 拡張A
- CJK Extension B Range: 20000–2A6D6 拡張B
- CJK Extension C Range: 2A700–2B734 拡張C
- CJK Extension D Range: 2B740–2B81D 拡張D
- CJK Extension E Range: 2B820–2CEA1 拡張E
- CJK Extension F Range: 2CEB0–2EBE0 拡張F
- CJK Compatibility Ideographs Range: F900–FAFF 互換漢字
- CJK Compatibility Ideographs Supplement Range: 2F800–2FA1F 互換漢字補足
- CJK Radicals / KangXi Radicals Range: 2F00–2FDF 部首
- CJK Radicals Supplement Range: 2E80–2EFF 部首補足
- CJK Strokes Range: 31C0–31EF おそらく一画ごとの表
- Ideographic Description Characters Range: 2FF0–2FFF おそらく配置
wikipediaでCJK統合漢字を見てみるとだいぶ複雑な歴史を経ている
16進数で表してみる
/[々〆〇〻㐂-頻]+/g
を
16進数で表す場合は、おそらくこのようになる
/[\u3005\u3006\u3007\u303b\u3402-\uFA6A\uD840-\uD869\uDC02-\uDFFF]+/g
それぞれの16進数が意味している文字は
3005:々
3006:〆
3007:〇
303B:〻
3402:㐂
FA6A:頻
D840:𠀋の上位サロゲート(範囲内のサロゲートペアの上位サロゲートで一番小さい)
D869:𪚲の上位サロゲート(範囲内のサロゲートペアの上位サロゲートで一番大きい)
DC02:𦐂の下位サロゲート(範囲内のサロゲートペアの下位サロゲートで一番小さい)
DFFF:𣟿の下位サロゲート(範囲内のサロゲートペアの下位サロゲートで一番大きい)
今回書いた正規表現を使って漢字を抽出してみる
コード.gsfunction get_kanji(){ var str = "abcABC123abcABC123かなカナカナ仮名ひらがなカタカナカタカナ漢字"; var pattern = /[々〆〇〻㐂-頻]+/g; var result = str.match(pattern); Logger.log(result); } | 意訳この機能がやること 探索対象の文字列を用意しておく 今回書いた漢字のパターン 一致するものを探して ログに出す |
実行結果
参考
Unicode 10.0 Character Code Charts
http://www.unicode.org/charts/
wikipedia
CJK統合漢字
https://ja.wikipedia.org/wiki/CJK%E7%B5%B1%E5%90%88%E6%BC%A2%E5%AD%97
常用漢字一覧
https://ja.wikipedia.org/wiki/%E5%B8%B8%E7%94%A8%E6%BC%A2%E5%AD%97%E4%B8%80%E8%A6%A7
漢字
https://ja.wikipedia.org/wiki/%E6%BC%A2%E5%AD%97
常用漢字表(平成22年内閣告示第2号)
http://www.bunka.go.jp/kokugo_nihongo/sisaku/joho/joho/kijun/naikaku/kanji/
日本漢字能力検定
級別漢字表
http://www.kanken.or.jp/kanken/outline/data/outline_degree_national_list.pdf