文字クラス
文字クラスは、文字や数字の区別など、文字の種類を区別します。
試してみましょう
種類
文字 | 意味 |
---|---|
[xyz]
|
文字クラス。囲んだ文字のいずれかに一致します。ハイフンを使用して文字の範囲を指定することもできますが、ハイフンが角括弧で囲まれた最初または最後の文字として現れた場合、それは通常の文字として文字クラスに含めるためのリテラルハイフンと見なされます。
例えば、
例えば、
例えば、 |
|
否定または補完する文字クラス。つまり、括弧で囲まれていないもの全てに一致します。ハイフンを使用して文字の範囲を指定することができますが、ハイフンが メモ: ^ の文字は入力の先頭も意味することがあります。 |
. |
次のいずれかの意味を持ちます。
複数行フラグ (
|
\d |
あらゆる(アラビア)数字に一致します。 |
\D |
あらゆる(アラビア)数字以外の文字に一致します。 |
\w |
アンダースコアを含むあらゆる半角英数字(基本ラテンアルファベット)に一致します。 |
\W |
基本ラテンアルファベットの文字以外に一致します。 |
\s |
ホワイトスペース 1 文字に一致します。例えば空白、タブ、改ページ、改行、その他の Unicode 空白文字などです。 |
\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 文字プロパティ に基づいて照合します(例えば、絵文字、日本語のカタカナ文字、日本語や中国語の漢字のみに一致するようにするなど)。 |
\ |
次の文字を特別に扱うこと、「エスケープ」することを示します。 その振る舞いは、2 通りのうちのどちらか 1 つです。
この文字を文字通りに一致させるには、それ自身をエスケープします。つまり、 |
x|y
|
論理和: "x" または "y" に一致します。パイプ (
|
例
一連の数字を探す
const randomData = "015 354 8787 687351 3512 8735";
const regexpFourDigits = /\b\d{4}\b/g;
// \b は境界を示します(つまり、単語の途中から照合開始しません)
// \d{4} は 4 つの数字を示します
// \b は別の境界を示します(つまり、単語の真ん中でマッチが終わりません)
console.table(randomData.match(regexpFourDigits));
// ['8787', '3512', '8735']
A から始まる(ラテンアルファベットの)単語を探す
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;
// \b は境界を示します(つまり、単語の途中から照合を開始しません)
// [aA] は a または A の文字を示します
// \w+ は複数回の *ラテンアルファベットからなる* 任意の文字を示します
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));
["Приключения", "Алисы", "в", "Стране", "чудес"];
母音を数える
const aliceExcerpt =
"There was a long silence after this, and Alice could only hear whispers now and then.";
const regexpVowels = /[AEIOUYaeiouy]/g;
console.log("Number of vowels:", aliceExcerpt.match(regexpVowels).length);
// Number of vowels: 26