文字クラス
文字クラスは、文字や数字の区別など、文字の種類を区別します。
試してみましょう
種類
文字 | 意味 |
---|---|
[xyz]
|
文字クラス: 囲んだ文字のいずれかに一致します。ハイフンを使用して文字の範囲を指定することもできますが、ハイフンが角括弧で囲まれた最初または最後の文字として現れた場合、それは通常の文字として文字クラスに含めるためのリテラルハイフンと見なされます。
例えば、
例えば、
例えば、
|
|
否定文字クラス:
角括弧で囲まれているものではないもの全てに一致します。ハイフンを使用して文字の範囲を指定することができますが、ハイフンが メモ: ^ の文字は入力の先頭も意味することがあります。 |
. |
ワイルドカード:
改行文字 ( |
\d |
数字文字クラスエスケープ:
あらゆる(アラビア)数字に一致します。 |
\D |
非数字文字クラスエスケープ:
あらゆる(アラビア)数字以外の文字に一致します。 |
\w |
英数文字クラスエスケープ:
アンダースコアを含むあらゆる半角英数字(基本ラテンアルファベット)に一致します。 |
\W |
非英数文字クラスエスケープ:
基本ラテンアルファベットの文字以外に一致します。 |
\s |
ホワイトスペース文字クラスエスケープ:
ホワイトスペース文字、例えば空白、タブ、改ページ、改行、その他の Unicode 空白文字などの 1 文字に一致します。 |
\S |
非ホワイトスペース文字クラスエスケープ:
ホワイトスペース以外の 1 文字に一致します。
|
\t |
水平タブに一致します。 |
\r |
復帰文字に一致します。 |
\n |
行送り文字に一致します。 |
\v |
垂直タブに一致します。 |
\f |
改ページに一致します。 |
[\b] |
後退文字に一致します。単語境界アサーション (\b ) についてはアサーションを参照してください。
|
\0 |
NUL 文字に一致します。この後ろに他の数字を続けてはいけません。 |
\cX
|
キャレット記法を使用した制御文字に一致します。 "X" には A–Z の文字が入ります(コードポイント |
\xhh
|
hh (2 桁の 16 進数)コードからなる文字に一致します。
|
\uhhhh
|
hhhh (4 桁の 16 進数)の値からなる UTF-16 コードユニットに一致します。
|
\u{hhhh} または \u{hhhhh}
|
(u フラグがセットされた時のみ) U+hhhh または U+hhhhh (16 進数) Unicode 値からなる文字に一致します。
|
\p{UnicodeProperty} ,
\P{UnicodeProperty}
|
Unicode 文字クラスエスケープ: Unicode 文字プロパティに基づいた文字に一致します。例えば、絵文字、日本語のカタカナ、中国語や日本語の漢字などです。 |
\ |
次の文字を特別に扱うこと、「エスケープ」することを示します。 その振る舞いは、2 通りのうちのどちらか 1 つです。
メモ: この文字を文字通りに一致させるには、それ自身をエスケープしてください。つまり、 |
x|y
|
論理和:
"x" または "y" に一致します。パイプ (
メモ: 論理和は「選択肢の集合」を指定するもう一つの方法ですが、文字クラスではありません。論理和は独立したものではありません。大きなパターンの一部にするためにはグループを使用する必要があります。 |
例
一連の数字を探す
この例では、4 桁の数字列を \d{4}
で照合します。\b
は 単語境界を示します(つまり、数列の途中から照合を始めたり終了したりしない)。
const randomData = "015 354 8787 687351 3512 8735";
const regexpFourDigits = /\b\d{4}\b/g;
console.table(randomData.match(regexpFourDigits));
// ['8787', '3512', '8735']
それ以外の例は文字クラスエスケープリファレンスを参照してください。
A から始まる(ラテンアルファベットの)単語を探す
この例では、A で始まる単語を照合します。\b
は単語境界(単語の途中から照合を始めない)を示します。[aA]
は文字 "a" または "A" を示します。\w+
はラテンアルファベットの任意の文字を複数回示します(+
は数量子です)。なお、すでに単語の文字がなくなるまで照合するので、末尾の \b
境界は必要ありません。
const aliceExcerpt =
"I'm sure I'm not Ada,' she said, 'for her hair goes in such long ringlets, and mine doesn't go in ringlets at all.";
const regexpWordStartingWithA = /\b[aA]\w+/g;
console.table(aliceExcerpt.match(regexpWordStartingWithA));
// ['Ada', 'and', 'at', 'all']
それ以外の例は文字クラスエスケープリファレンスを参照してください。
(Unicode 文字の)単語を探す
単語を表すために、ラテンアルファベットではなく、 Unicode 文字の範囲を使用することができます。(つまり、ロシア語やアラビア語のような他の言語のテキストを扱うことができます。) Unicode の 「基本多言語面」には、世界中で使われているほとんどの文字が含まれており、それらの文字で書かれた単語にマッチするための文字クラスと範囲を利用できます。
const nonEnglishText = "Приключения Алисы в Стране чудес";
const regexpBMPWord = /([\u0000-\u0019\u0021-\uFFFF])+/gu;
// U+0000 から U+FFFF までの BMP、ただし、U+0020 は空白
console.table(nonEnglishText.match(regexpBMPWord));
["Приключения", "Алисы", "в", "Стране", "чудес"];
それ以外の例は Unicode 文字クラスエスケープリファレンスを参照してください。
母音を数える
この例では、母音 (A, E, I, O, U, Y) で始まる単語を数えます。 g
フラグは、テキスト中に出現するすべてのパターンに使用します。 i
フラグはパターンを大文字と小文字を区別しないようにするために使用し、大文字の母音と小文字の母音の両方に一致します。
const aliceExcerpt =
"There was a long silence after this, and Alice could only hear whispers now and then.";
const regexpVowels = /[aeiouy]/gi;
console.log("母音の数:", aliceExcerpt.match(regexpVowels).length);
// 母音の数: 26