📑

正規表現で使用できる Unicode文字クラスエスケープご存知ですか?

2025/02/19に公開

はじめまして。アスエネ株式会社の片山です。

はじめに

皆さん、Unicode文字クラスエスケープ をご存知でしょうか?
Unicode文字クラスエスケープ は、Unicodeに基づいて文字を分類し、特定のカテゴリにマッチする文字を簡単に指定できる便利な機能です。

Unicode文字クラスエスケープとは

Unicode文字クラスエスケープ は、正規表現の中で文字が所属するUnicodeカテゴリに基づいてマッチングを行うためのエスケープシーケンスです。Unicode対応モード(u または v のどちらかのフラグがついた正規表現) でのみ対応しており、文字がアルファベット、数字、空白など、どのカテゴリに属するかを基にして、正規表現を使った検索や操作を行うことができます。

Unicode文字クラスエスケープを使用せずに顔文字を指定する例

Unicode文字クラスエスケープが使えなかった時代には、絵文字のコードポイント範囲を直接指定する必要があります。
例えば、次のように指定します。

/[\u{1F600}-\u{1F64F}]/u.test('😀') // true

使い方

構文について

主に以下の書式で使用します。

書式

\p から始めると指定したものにマッチし、 \P から始めると指定したもの以外にマッチします。

\p{loneProperty} // プロパティに一致する文字にマッチ
\P{loneProperty} // プロパティに一致しない文字にマッチ

\p{property=value} // プロパティに一致する文字にマッチ
\P{property=value} // プロパティに一致しない文字にマッチ

引数

property

Unicode規格には様々な種類の property が存在しますが、ECMAScript では指定できる属性名は3つに限られています。

  • General_Category (gc)
    General_Category は、Unicode文字をその一般的な種類に基づいて分類するためのプロパティです。このプロパティを使うことで、文字の種類を指定して、アルファベット、数字、句読点などを識別できます。
    General_Category のリストについては、Unicode 仕様書 にまとまっています。
  • Script (sc)
    Script は、文字が属する書記体系(スクリプト)を指定するためのプロパティです。Unicodeの文字は、特定の書記体系に基づいて分類されます。
    詳細は、Unicode 仕様書ECMAScript 仕様書の文字体系一覧表ISO 15924 文字体系コードのリスト にまとまっています。
  • Script_Extensions (scx)
    Script_Extensions は、スクリプト拡張 を指定するためのプロパティです。ある文字が複数のスクリプトにまたがる場合、Script_Extensions を使うことで、追加のスクリプトにも一致させることができます。

使用例

  • General_Category の場合
/^\p{General_Category=Letter}+$/u.test('hogeHOGEほげホゲホゲ'); // true

/^\p{gc=Letter}+$/u.test('hogeHOGEほげホゲホゲ'); // true

/^\p{Letter}+$/u.test('hogeHOGEほげホゲホゲ'); // true
  • Script の場合
/^\p{Script=Hiragana}+$/u.test('あいうえお') // true

/^\p{sc=Katakana}+$/u.test('アイウエオ') // true

/^\p{sc=Han}+$/u.test('株式会社') // true
  • Script_Extensions の場合
/^\p{Script=Hira}+$/u.test('あー') // false

/^\p{scx=Hira}+$/u.test('あー') // true
  • Binary Unicode property の場合
/\p{Emoji}+/u.test('🤔') // true

/\p{space}+/u.test('a a') // true

まとめ

Unicode文字クラスエスケープは、正規表現を使った文字列のパターンマッチングをさらに強力にし、複雑な文字セットに対しても柔軟に対応できるようにします。

Unicodeエスケープシーケンスを使う際には、u フラグを忘れずに、またサポートされている Unicodeプロパティに注意して利用しましょう。


最後まで、目を通していただきありがとうございました!アスエネでは、自分の強みを活かしながら、自分の目標目掛けてチャレンジできる魅力的な環境があります。全方位で採用強化中なので、ご興味がある方は、ぜひこちらの採用サイトからご連絡ください!
(SNSからカジュアルにご連絡いただくのも大歓迎です!)
https://corp.asuene.com/recruit

Discussion