JavaScript - 正規表現による文字列の検索
公開日:2018-12-14 更新日:2019-05-13
1. 概要
正規表現で文字列を検索します。
該当するものがあるかどうかは search() で調べ、
ヒットした文字列を取得する場合は、match() を使います。
複数の検索結果や詳細な情報を取得したい場合には、RegExp の exec() を使用します。
該当するものがあるかどうかは search() で調べ、
ヒットした文字列を取得する場合は、match() を使います。
複数の検索結果や詳細な情報を取得したい場合には、RegExp の exec() を使用します。
文字列.search(/パターン/)
文字列.search(/パターン/フラグ)
文字列.match(/パターン/)
文字列.match(/パターン/フラグ)
var reg = RegExp('パターン', 'フラグ');
reg.exec(文字列);
2.1 サンプル - 文字列の検索
「DEF」と一致する文字列を検索します。
通常、文字列は「"」か「'」で囲いますが、正規表現の場合は、「/」で囲います。
これを正規表現リテラルと呼び、正規表現が事前にコンパイルされます。
「"」で囲んでも実行結果は同じ結果になりますが、固定の正規表現を繰り返し実行する場合には、
「/」で囲んだ方が処理速度が速くなります。
また、/文字列/i のように、i と言うフラグを付けると、大文字小文字を無視して検索することができます。
以下の例では「DEF」で検索していますが、「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文字を検索できます。
数字3文字の箇所を検索する場合には、[0-9][0-9][0-9] とします。
また、[0-9]{3} のようにして、{} で文字数を指定することもできます。
// 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 を付けて、大文字小文字を無視して、文字列全体を検索しています。
また、フラグに 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