文字クラス

草案
このページは完成していません。

文字クラスは、文字や数字の区別など、文字の種類を区別します。

種類

文字 意味
.

次のいずれかの意味を持ちます。

  • 行末文字 ( \n\r\u2028\u2029 ) を除くあらゆる 1 文字とマッチします。例えば、/.y/ は "my" と "ay" にマッチし、"yes make my day" の "yes" にはマッチしません。
  • 文字セット内では . はその特別な意味を失い、文字通りの "."と一致します。

複数行フラグ (m)  は "." の意味を変えないことに注意してください。そのため、複数行にわたるパターンに一致させるには、(IEの古いバージョン以外なら)文字集合 [^] を使うことで、改行を含む任意の文字に一致します。

ES2018 では s "dotAll" フラグが追加されました。これは行末文字と一致することを可能にします。

\d

あらゆる(アラビア)数字にマッチします。[0-9] に相当します。例えば /\d//[0-9]/ は "B2 is the suite number" の "2" にマッチします。

\D

あらゆる(アラビア)数字以外の文字にマッチします。[^0-9] に相当します。例えば /\D//[^0-9]/ は "B2 is the suite number" の "B" にマッチします。

\w

アンダースコアを含むあらゆる半角英数字(基本ラテンアルファベット)にマッチします。[A-Za-z0-9_] に相当します。例えば /\w/ は、"apple," の 'a' や "$5.28," の "5" や "3D" の "3" にマッチします。

\W

前述以外の文字にマッチします。[^A-Za-z0-9_] に相当します。例えば /\W//[^A-Za-z0-9_]/ は、"50%" の "%" にマッチします。

\s

スペース、タブ、改ページ、改行を含むホワイトスペース文字にマッチします。[ \f\n\r\t\v​\u00a0\u1680​\u180e\u2000​-\u200a​\u2028\u2029\u202f\u205f​\u3000\ufeff] に相当します。例えば /\s\w*/"foo bar"" bar" にマッチします。

\S

ホワイトスペース以外の文字にマッチします。[^ \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] に相当します。例えば /\S\w*/ は "foo bar" の "foo" にマッチします。

\t タブ (U+0009) にマッチします。
\r 復帰文字 (U+000D) にマッチします。
\n 改行文字 (U+000A) にマッチします。
\v 垂直タブ (U+000B) にマッチします。
\f 改ページ (U+000C) にマッチします。
[\b] 後退文字(バックスペース、U+0008)にマッチします。単語境界文字 (\b) については境界を見てください。
\0 NULL 文字 (U+0000) にマッチします。この後ろに他の数字を続けてはいけません。\0 の後に(0 から 7 までの)数字が続くと 8 進数のエスケープシーケンスとなるからです。
\cX

X には A から Z のうち 1 文字が入ります。文字列中の制御文字にマッチします。例えば /\cM/ は文字列中の control-M (U+000D) にマッチします。

\xhh hh(2 桁の 16 進数)コードからなる文字にマッチします。
\uhhhh hhhh(4 桁の 16 進数)の値からなる UTF-16 コードユニットにマッチします。
\u{hhhh} または \u{hhhhh}

(u フラグがセットされた時のみ) U+hhhh または U+hhhhh (16 進数) Unicode 値からなる文字にマッチします。

\

次の文字を特別に扱うこと、「エスケープ」することを示します。 その振る舞いは、2 通りのうちのどちらか 1 つです。

  • 通常文字の前に付けられた場合、次の文字が特別なもので、文字通りには評価されないことを示します。例えば b は文字 "b" にマッチします。しかし "b" の前にバックスラッシュを置いて \b とすると、単語区切りを意味するようになります。
  • 特殊文字の前に付けられた場合、次の文字が特別なものでなく、文字通りに評価されることを表します。例えば、"*" は、先行文字の 0 回以上の出現が一致する必要があることを意味する特殊文字です。例えば、/a*/ は 0 回以上の "a" とマッチします。文字通りの * にマッチさせるには、その直前にバックスラッシュを入れます。例えば、/a\*/"a*" とマッチします。

この文字を文字通りにマッチさせるには、それ自身をエスケープします。つまり、 /\\/ を使って \ を検索します。

一連の数字を探す

var randomData = "015 354 8787 687351 3512 8735";
var regexpFourDigits = /\b\d{4}\b/g;
// \b は境界を示します(つまり、単語の真ん中からマッチを開始しません)
// \d{4} は 4 つの数字を示します
// \b は別の境界を示します(つまり、単語の真ん中でマッチが終わりません)


console.table(randomData.match(regexpFourDigits));
// ['8787', '3512', '8735']

A から始まる(ラテンアルファベットの)単語を探す

var 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.";
var regexpWordStartingWithA = /\b[aA]\w+/g;
// \b は境界を示します(つまり、単語の真ん中からマッチを開始しません)
// [aA] は a または A の文字を示します
// \w+ は複数回の *ラテンアルファベットからなる* 任意の文字を示します

console.table(aliceExcerpt.match(regexpWordStartingWithA));
// ['Ada', 'and', 'at', 'all']

(ユニコード文字の)単語を探す

単語を表すために、ラテンアルファベットではなく、 Unicode 文字の範囲が使えます。(つまり、ロシア語やアラビア語のような他の言語のテキストを扱えます。) Unicode の 「基本多言語面」には、世界中で使われているほとんどの文字が含まれており、それらの文字で書かれた単語にマッチするための文字クラスと範囲を利用できます。

var nonEnglishText = "Приключения Алисы в Стране чудес";
var regexpBMPWord = /([\u0000-\u0019\u0021-\uFFFF])+/gu;
// U+0000 から U+FFFF までの BMP、ただし、U+0020 は空白

console.table(nonEnglishText.match(regexpBMPWord));
[ 'Приключения', 'Алисы', 'в', 'Стране', 'чудес' ]

仕様

仕様書 策定状況 コメント
ECMAScript (ECMA-262)
RegExp: Character classes の定義
現行の標準

ブラウザサポート

No compatibility data found. Please contribute data for "javascript.builtins.RegExp.character_classes" (depth: 1) to the MDN compatibility data repository.

関連情報