Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「ある文字列に日本語が含まれるか」をJavaScriptの正規表現で判定してみよう

Avatar for tsuji-108 tsuji-108
March 28, 2025
43

 「ある文字列に日本語が含まれるか」をJavaScriptの正規表現で判定してみよう

Avatar for tsuji-108

tsuji-108

March 28, 2025
Tweet

Transcript

  1. const hasJapanese = (target) => { // ひらがな if (/\p{Script=Hiragana}/u.test(target))

    return true; // カタカナ if (/\p{Script=Katakana}/u.test(target)) return true; // 漢字 if (/\p{Script=Han}/u.test(target)) return true; // 約物・記号など if (/\p{Script=Common}/u.test(target)) return true; return false; }; 現代のJavaScriptの正規表現による日本語判定
  2. /\p{Script=XXX}/uとは? • \p ◦ \pでUnicodeプロパティを指定したマッチが可能になります。 ▪ > 「あ」のプロパティ ◦ 2025.03時点のJavaScriptにおいて、\pで指定可能なプロパティは、

    General_Category(gc)・Script(sc)・Script_Extensions(scx)の3種類です。 • Script ◦ 文字体系のことで「同種の表記に使われるひとまとまりの文字の体系」を意味しま す。 (Wikipediaより引用。詳しくは文字体系と表記体系 | Wikipediaをご覧ください。) • u ◦ uは正規表現でサロゲートペアを扱うために付与します。
  3. • 現代の各種ブラウザ・ Node.js・Denoでサポートされています! ◦ > Unicode 文字クラスエスケープ: \p{…}, \P{…} ブラウザーの互換性|

    mdn ◦ > escape: \p{…}, \P{…} | Can I use • ひらがな・カタカナ・漢字以外の文字体系も指定できます! ◦ > mdnの解説ページ ◦ /\p{Script=Latin}/uでラテン文字に。/\p{Script=Grek}/uでギリシャ文字に…。 • /\p{Script=Han}/uは、サロゲートペアを使用する漢字たちも判定対象に含まれま す! ◦ 「𩸽(ほっけ)」(符号:U+29E3D = 10 | 10011110 | 00111101)のような2バイトよ り大きい符号をもつ漢字も判定対象です。 /\p{Script=XXX}/uのすごいところ
  4. /\p{Script=XXX}/uの注意点 その1 const hasJapanese = (target) => { // ひらがな

    if (/\p{Script=Hiragana}/u.test(target)) return true; // …略… // Script=Commonを使わずに、CJK symbols and punctuation(https://www.unicode.org/charts/PDF/U3000.pdf)の約物・記号を狙い撃 ちするパターン // CJK symbols and punctuation if (/[\u3000-\u3006]/.test(target)) return true; // CJK angle brackets if (/[\u3008-\u300B]/.test(target)) return true; // CJK corner brackets if (/[\u300C-\u300F]/.test(target)) return true; // …略… return false; };
  5. • 現代のJavaScriptの正規表現による日本語判定。 ◦ ひらがなにマッチさせるなら、/\p{Script=Hiragana}/u.test(str) ◦ カタカナにマッチさせるなら、/\p{Script=Katakana}/u.test(str) ◦ 漢字にマッチさせるなら、/\p{Script=Han}/u.test(str) ◦ 約物・記号などにマッチさせるなら、/\p{Script=Common}/u.test(str)

    • /\p{Script=XXX}/uは、各種ブラウザ・Node.js・Denoでサポートされている。 • /\p{Script=Han}/uは、サロゲートペアを使用する漢字たちも判定対象に含まれる。 • /\p{Script=XXX}/uを利用するときも、あらかじめ「どの範囲までマッチさせるか」の取 り決めはとても重要です。 まとめ
  6. 参考リンク集 • \p{…} ◦ Unicode 文字クラスエスケープ: \p{…}, \P{…} property |

    mdn:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Regular_expressions/Unic ode_character_class_escape ◦ escape: \p{…}, \P{…} | Can I use:https://caniuse.com/mdn-javascript_regular_expressions_unicode_character_class_escape • uフラグ ◦ https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/unicod e#%E8%A7%A3%E8%AA%AC • Unicode ◦ Unicode Utilities: UnicodeSet:https://util.unicode.org/UnicodeJsps/list-unicodeset.jsp ◦ Unicode 16.0 Character Code Charts:https://www.unicode.org/charts/ ◦ Unicode® Statistics:https://www.unicode.org/versions/stats/