パターンについて
【開発環境】
OS:Win11(64ビット)
VSCode1.72.2、
クロム
【記述した文字列にマッチする】
パターンの中に文字を記述した場合は、その文字そのものとマッチします。
サンプル
let regexp = /Sun/; console.log(regexp.test('Today is Sunday')); >> true console.log(regexp.test('The Sun rose')); >> true console.log(regexp.test('Ham Sandwich')); >> false
Sunが文字列に含まれる場合はtrueになる。それ以外は、fals
【任意の一文字(.)】
メタ文字のひとつであるドット(.)は任意の一文字(例外あり)にマッチします。
※ ただし、次の文字にはマッチしません。
\n \r \u2028 # Line Separator \u2029 # Paragraph Separator
サンプルコード
let regexp = /S..d/;//Sで始まりdで終わる4文字
console.log(regexp.test('Today is Sunday')); > true console.log(regexp.test('The Sun rose')); > false console.log(regexp.test('Ham Sandwich')); > true
【角括弧の中の一文字】
角括弧([...])は角括弧の中に記述した複数の文字のいずれか一つにマッチさせる場合に使用するメタ文字です。
・サンプルコード
let regexp = /[sS]un/;→sunか、Sunに一致するもの console.log(regexp.test('Today is Sunday')); > true console.log(regexp.test('The sun rose')); > true console.log(regexp.test('Ham Sandwich')); > false
【角括弧の否定】
角括弧([...])の先頭に否定を表すキャレット(^)を記述した場合[^...]は、角括弧の中に記述した複数の文字のいずれにも一致しない場合にマッチします。
・サンプルコード
let regexp = /199[^01234]/; console.log(regexp.test('My birthday is 1998/03/12')); > true console.log(regexp.test('Graduated in 1994')); > false console.log(regexp.test('It opened in 1996')); > true
【角括弧の範囲指定】
角括弧([...])の中でハイフン(-)を記述すると、ハイフンの左側から右側までの範囲に含まれる連続するいずれかの文字にマッチします。例えば次のように記述することができます。
[0-9] 0 から 9 までのいずれかの数値 [a-z] a から z までのいずれかの文字 [A-Z] A から Z までのいずれかの文字
サンプルコード
let regexp = /199[0-6]/; console.log(regexp.test('My birthday is 1998/03/12')); >> false console.log(regexp.test('Graduated in 1994')); >> true console.log(regexp.test('It opened in 1996')); >> true
【文字クラスの略記法】
文字クラスでは [ から ] の中に文字の範囲を記述することで多くの文字の中のいずれかの文字とマッチするパターンを記述することができますが、特によく使用するものについては略記法が用意されています。 JavaScript で利用可能な略記法は次の通りです。
\d 数字 [0-9]
\D 数字以外 [^\d]
\w 英数字とアンダーバー [0-9a-zA-Z_]
\W 英数字とアンダーバー以外 [^\w]
\s 空白文字 [ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
\S 空白文字以外 [^\s]
\D は \d の否定のように大文字のものは小文字のものの否定になっています。
空白文字は半角スペース以外に改行(\n)やタブ(\t)など空白に相当する文字にマッチします。
例えば次の二つのパターンは同じ文字にマッチします。
const regexp1 = /[0-9]/; const regexp2 = /\d/;
記述方法が異なるだけでマッチする文字は同じです。略記法が用意されているものについては略記法を使用することでよりコンパクトにパターンを記述することができます。
簡単なサンプルで試してみます。
let str = '郵便番号は 456-7890 です';
let regexp = /\d{3}-\d{4}/;
let result = str.match(regexp);
console.log(result[0]);
>> 456-7890
【行などの特殊な文字】
改行やタブなどキーボードから入力できないような特殊な文字にマッチするパターンを記述するため、バックスラッシュ(\)と文字を組み合わせたメタ文字が用意されています。
\0 NULL \f 改ページ \n 改行 \r 復帰 \t タブ \v 垂直タブ \cX Ctrl + x \xhh 16進数 hh のASCII文字 \uhhhh 16進数 hhhh で表されるUTF-16のコードユニット
また u フラグが設定されている場合は、次のメタ文字も使用できます。
\u{hhhh} \u{hhhhh} 16進数 hhhh または hhhhh で表されるUnicodeコードポイント
簡単なサンプルで試してみます。
let str = `こんにちは。
今日も寒いですね。`;
let regexp = /。\n./;
let result = str.match(regexp);
console.log(result[0]);
>> 。
>> 今