JavaScript - 正規表現による文字列の検索

公開日:2018-12-14 更新日:2019-05-13

1. 概要

正規表現で文字列を検索します。
該当するものがあるかどうかは search() で調べ、
ヒットした文字列を取得する場合は、match() を使います。
複数の検索結果や詳細な情報を取得したい場合には、RegExp の exec() を使用します。

文字列.search(/パターン/)
文字列.search(/パターン/フラグ)
文字列.match(/パターン/)
文字列.match(/パターン/フラグ)

var reg = RegExp('パターン', 'フラグ');
reg.exec(文字列);

2.1 サンプル - 文字列の検索

「DEF」と一致する文字列を検索します。

//           0123456789012345678
var index = "abc 0 ABC 1 def 2 DEF 3 xyz 9 XYZ".search(/DEF/);
console.log(index);  //18

通常、文字列は「"」か「'」で囲いますが、正規表現の場合は、「/」で囲います。
これを正規表現リテラルと呼び、正規表現が事前にコンパイルされます。
「"」で囲んでも実行結果は同じ結果になりますが、固定の正規表現を繰り返し実行する場合には、
「/」で囲んだ方が処理速度が速くなります。

また、/文字列/i のように、i と言うフラグを付けると、大文字小文字を無視して検索することができます。
以下の例では「DEF」で検索していますが、「def」が引っかかっています。
//           0123456789012
var index = "abc 0 ABC 1 def 2 DEF 3 xyz 9 XYZ".search(/DEF/i);
console.log(index);  //12

2.2 サンプル - 数字の検索

正規表現では、[0-9] で数字1文字を検索できます。

//           01234
var index = "abc 0 ABC 1 def 2 DEF 3 xyz 9 XYZ".search(/[0-9]/);
console.log(index);  //4

数字3文字の箇所を検索する場合には、[0-9][0-9][0-9] とします。
//           012345678901234567
var index = "abc 0 ABC 11 def 222 DEF 3333 xyz 9 XYZ".search(/[0-9][0-9][0-9]/);
console.log(index);  //17

また、[0-9]{3} のようにして、{} で文字数を指定することもできます。
//           012345678901234567
var index = "abc 0 ABC 11 def 222 DEF 3333 xyz 9 XYZ".search(/[0-9]{3}/);
console.log(index);  //17

2.3 サンプル - パターンに一致した文字列の取得

match() を使うと、どんな文字列でヒットしたのかを取得できます。
また、フラグに g を付けると、全てのヒットした箇所を取得できます。
付けない場合は、最初に見つかった時点で検索が終わります。
以下の例では、フラグとして ig を付けて、大文字小文字を無視して、文字列全体を検索しています。
var result = "abc 0 ABC 1 def 2 DEF 3 xyz 9 XYZ".match(/DEF/ig);
console.log(result.length); //ヒットした数           : 2
console.log(result[0]);     //ヒットした1番目の文字列 : def
console.log(result[1]);     //ヒットした2番目の文字列 : DEF

2.4 サンプル - 複数の検索結果の取得

RegExp の exec() を使用すると、複数の検索結果を取得できます。

//                 1         2
//       01234567890123456789012
var s = "123 abc 456 DEF 789 ghi";
var regExp = RegExp("[a-z]", "g");
while (result = regExp.exec(s)) {
console.log("[" + result.index + "] = "  + result[0]);
}

[4] = a
[5] = b
[6] = c
[20] = g
[21] = h
[22] = i