RegExp.prototype.unicode
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
unicode
はRegExp
インスタンスのアクセサープロパティで、この正規表現にu
フラグが使用されているかどうかを返します。
試してみましょう
const regex1 = new RegExp("\u{61}");const regex2 = new RegExp("\u{61}", "u");console.log(regex1.unicode);// Expected output: falseconsole.log(regex2.unicode);// Expected output: trueconsole.log(regex1.source);// Expected output: "a"console.log(regex2.source);// Expected output: "a"
解説
RegExp.prototype.unicode
の値はtrue
ならばu
フラグが使用されていることを示し、そうでなければfalse
となります。u
フラグは Unicode に関連する様々な機能を有効にします。 "u" フラグを使用すると、次のようになります。
- Unicode コードポイントエスケープ ( \u{xxxx}, \p{UnicodePropertyValue}) は、ID エスケープの代わりにそのように解釈されます。例えば、
/\u{61}/u
は"a"
に一致しますが、/\u{61}/
(u
フラグなし)は"u".repeat(61)
に一致します。\u
がu
1 文字と同等になるからです。 - サロゲートペアは 2 つの別々の文字ではなく、全体の文字として解釈されます。例えば
/[😄]/u
は"😄"
にのみ一致し、"\ud83d"
には一致しません。 lastIndex
が自動的に進む場合(exec()
を呼び出した場合など)、Unicode 正規表現は UTF-16 コード単位ではなく Unicode コードポイント単位で進みます。
構文の間違いを防ぐために、構文解析の動作を変更したものが他にもあります(正規表現構文の厳格モードに似ています)。これらの構文はすべて非推奨であり、ウェブの互換性のためだけに残されているものですので、頼らないでください。
unicode
の設定アクセサーはundefined
です。このプロパティを直接変更することはできません。
Unicode 対応モード
Unicode 対応モードと言う言葉を使うときは、u
またはv
のどちらかのフラグがついた正規表現を指し、この場合は正規表現が Unicode に関連した機能(Unicode 文字クラスエスケープなど)が利用できるようになり、もっと厳格化した構文ルールになります。u
とv
は同じ正規表現を互換性のない方法で解釈するため、両方のフラグを使用するとSyntaxError
になります。
同様に、正規表現がu
フラグもv
フラグも持たない場合、Unicode 非対応モードとなります。この場合、正規表現は UTF-16 コード単位の並びとして解釈され、たくさんの古い構文が構文エラーにならなくなります。
例
unicode プロパティの使用
const regex = /\u{61}/u;console.log(regex.unicode); // true
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification # sec-get-regexp.prototype.unicode |