正規表現で使用できる Unicode文字クラスエスケープご存知ですか?
はじめまして。アスエネ株式会社の片山です。
はじめに
皆さん、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} // プロパティに一致しない文字にマッチ
引数
-
loneProperty
は、General_Category
のvalue
、またはバイナリープロパティ名 を指定します。v
モードでは、文字列のバイナリー Unicode プロパティ にもなります。 -
property
は、Unicode文字の特定のカテゴリや属性を示すラベルです。例えば、General_Category
やScript
などが含まれます。 -
value
は、property
の値を指定します。たとえば、General_Category=Letter
の場合、Letter
が 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からカジュアルにご連絡いただくのも大歓迎です!)
Discussion