リテラル文字: a, b
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
リテラル文字は、入力テキスト内で一致するもの自体を示します。
構文
c
引数
c
-
下記で記述する構文文字以外の単一の文字です。
解説
正規表現では、ほとんどの文字が文字通り現れます。これらは通常、パターンの最も基本的な構成要素です。例えば、HTML タグの削除の例からのパターンです。
const pattern = /<.+?>/g;
この例では、.
、+
、?
は構文文字と呼ばれます。これらは正規表現において特別な意味を持っています。パターンの残りの文字(<
と >
)はリテラル文字です。これらは入力されたテキスト、つまり左と右の山括弧に一致します。
以下は正規表現における構文文字であり、リテラル文字として現れることはありません。
文字クラスの中では、より多くの文字を文字通り記述することができます。詳しい情報は文字クラスのページを参照してください。例えば \.
と [.]
はどちらもリテラル .
に一致します。しかし、v
モード文字クラス では、構文文字として予約されている文字の異なる集合があります。包括的に言うと、下記は別の ASCII 文字と、それらが様々なコンテキストでエスケープまたはアンエスケープされて現れるかどうかの表です。"✅" はその文字自身を表し、"❌" は構文エラーを発生し、"⚠️" はその文字が有効であるが、それ自身以外の何かを意味していることを意味します。
文字 | u または v モードにおける文字クラス外の文字 |
u モードの文字クラス |
v モードの文字クラス |
|||
---|---|---|---|---|---|---|
エスケープなし | エスケープあり | エスケープなし | エスケープあり | エスケープなし | エスケープあり | |
123456789 "' |
✅ | ❌ | ✅ | ❌ | ✅ | ❌ |
!#%&,:;<=>@`~ |
✅ | ❌ | ✅ | ❌ | ✅ | ✅ |
] |
❌ | ✅ | ❌ | ✅ | ❌ | ✅ |
()[{} |
❌ | ✅ | ✅ | ✅ | ❌ | ✅ |
*+? |
❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
/ |
✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
0DSWbdfnrstvw |
✅ | ⚠️ | ✅ | ⚠️ | ✅ | ⚠️ |
B |
✅ | ⚠️ | ✅ | ❌ | ✅ | ❌ |
$. |
⚠️ | ✅ | ✅ | ✅ | ✅ | ✅ |
| |
⚠️ | ✅ | ✅ | ✅ | ❌ | ✅ |
- |
✅ | ❌ | ✅⚠️ | ✅ | ❌⚠️ | ✅ |
^ |
⚠️ | ✅ | ✅⚠️ | ✅ | ✅⚠️ | ✅ |
\ |
❌⚠️ | ✅ | ❌⚠️ | ✅ | ❌⚠️ | ✅ |
メモ: v
モード文字クラスでエスケープとアンエスケープの両方が可能な文字は、まさに「二重記号」として禁止されている文字です。詳しくはv
モード文字クラスを参照してください。
構文文字を文字通りに照合したい場合は、バックスラッシュ (\
) でエスケープする必要があります。例えば、パターン中のリテラル文字 *
と照合するには、パターンに \*
と書く必要があります。構文文字をリテラル文字として使用すると、予期しない結果になるか、構文エラーが発生します。例えば、 /*/
は正規表現として有効ではありません。Unicode 非対応モードでは、]
、{
、}
は文字クラスの終わりや数量詞の区切りとして解釈できない場合、文字通りに現れることがあります。これはウェブ互換性のために非推奨ですので、頼ってはいけません。
正規表現リテラルは、特定の非構文リテラル文字を指定することはできません。/
はリテラル自体の区切り文字として使用されるため、リテラル /
と照合したい場合は \/
としてエスケープする必要があります。リテラルは複数の行にまたがることができないので、改行文字も正規表現リテラルでリテラル文字として使用することはできません。代わりに \n
のような文字エスケープを使用する必要があります。RegExp()
コンストラクターを使用する場合は、このような制限はありませんが、文字列リテラルには自分自身でエスケープするルールがあります(例えば、"\\"
は実際には単一のバックスラッシュ文字を表すので、new RegExp("\\*")
と /\*/
は等価です)。
Unicode 非対応モードでは、パターンは UTF-16 コード単位の並びとして解釈されます。これはサロゲートペアが実際には 2 つのリテラル文字を表していることを意味しています。これは、他の機能とペアになったときに予期せぬ動作が発生します。
/^[😄]$/.test("😄"); // false。このパターンは /^[\ud83d\udc04]$/ と解釈されるため
/^😄+$/.test("😄😄"); // false。このパターンは /^\ud83d\udc04+$/ と解釈されるため
Unicode 対応モードでは、パターンは Unicode コードポイントの並びとして解釈され、サロゲートペアは分割されません。できれば常に u
フラグを使用しましょう。
例
リテラル文字の使用
次の例は文字エスケープからコピーしたものです。a
と b
はパターン内のリテラル文字で、\n
は正規表現リテラルでは文字通りに現れないのでエスケープされた文字です。
const pattern = /a\nb/;
const string = `a
b`;
console.log(pattern.test(string)); // true
仕様書
Specification |
---|
ECMAScript Language Specification # prod-PatternCharacter |
ブラウザーの互換性
BCD tables only load in the browser