JavaScript exec 正規表現で値を返す

説明 execメソッド
サンプル 文字列を指定
orを指定([])
否定(^)
文字の範囲(-)
先頭の文字列(^)
末尾の文字列($)
連続する文字{数値}
1桁以上{1,}
応用 数値(0-9)の5桁+先頭と末尾も(0-9)
数値(0-9)と英字(a-f)の5桁+先頭と末尾も(0-9 or a-f)
郵便番号(数値3桁とハイフンと数値4桁)+先頭と末尾も(0-9)
エスケープ ドット(.)を文字として指定(エスケープ)
構文 正規表現の構文とオプション

execメソッド

変数1 = /正規表現のパターン/;
変数 = 変数1.exec (文字列);
  • 正規表現のパターンで文字列を検索します。
  • 一致した場合、一致した値を配列で返します。
  • 配列のインデックスの0にマッチした該当の文字が入ります。
  • 一致しなかった場合、nullを返します。
  • gオプションを付けたときの挙動がStringオブジェクトのmatchメソッドと違います。(「文字を範囲で指定」を参照)
  • RegExpオブジェクトのメソッドです。

特定のパターンが存在するか確認するだけであればexecメソッドではなく真偽値を返すtestメソッドまたはインデックス値を返すsearchメソッドの方が実行速度が早くなります。

 

文字列を指定

<script>
const a = /BC/;
const b = a.exec("ABC");

console.log(b);//["BC", index: 1, input: "ABC", groups: undefined]
console.log(b[0]);//BC
</script>

2行目は、文字列「BC」を指定しています。
execメソッドは5行目のように値を配列で返します。
6行目は、インデックスを指定して値を取得しています。

 

orを指定([])

<script>
const a = /[AE]/;
const b = a.exec("ABC");

console.log(b[0]);//A
</script>

2行目は、「A」または「E」を指定しています。

 

否定(^)

<script>
const a = /[^A]/;
const b = a.exec("ZZZ");

console.log(b[0]);//Z
</script>

2行目は、「A」以外の文字を指定しています。

 

文字の範囲(-)

<script>
	const a = /[A-C]/;
	const b = a.exec("ZZC");
	
	console.log(b[0]);//C

	const c = /[A-C]/g;
	const d = c.exec("ABGC");
	
	console.log(d);//["A", index: 0, input: "ABGC", groups: undefined]
</script>

2行目は、「A」または「B」または「C」の文字を指定しています。
7行目は、オプションのg(全て)を指定していますが配列でAのみを取得します。
matchメソッドでは、配列で["A", "B", "C"]を取得します。

 

先頭の文字列(^)

<script>
	const a = /^AB/;
	const b = a.exec("ABC");

	console.log(b[0]);//AB
</script>

2行目は、先頭が「AB」の文字を指定しています。

 

末尾の文字列($)

<script>
	const a = /BC$/;
	const b = a.exec("ABC");

	console.log(b[0]);//BC
</script>

2行目は、末尾が「BC」の文字を指定しています。

 

連続する文字{数値}

<script>
	const a = /c{2}/;
	const b = a.exec("acccb");
	
	console.log(b[0]);//cc
</script>

2行目は、「c」が2回連続する文字を指定しています。

 

1桁以上{1,}

<script>
	const ptr = /[0-9]{1,}-/;
	const b = ptr.exec("1-");
	const c = ptr.exec("123-");
	const d = ptr.exec("ab1-");
	const e = ptr.exec("a1b-");

	console.log(b[0]);// 1-
	console.log(c[0]); // 123-
	console.log(d[0]); // 1-
	console.log(e); // null
</script>

2行目は、数値1桁以上とハイフン(-)を指定しています。

 

数値(0-9)の5桁+先頭と末尾も(0-9)

<script>
	const a = /^[0-9]{5}$/;
	const b = a.exec("12345");
	const c = a.exec("a2345");
	const d = a.exec("123456");

	console.log(b[0]);//12345
	console.log(c); // null 文字あり マッチしない
	console.log(d); // null 5桁でない マッチしない
</script>

 

数値(0-9)と英字(a-f)の5桁+先頭と末尾も(0-9 or a-f)

<script>
	const a = /^[0-9a-f]{5}$/;
	const b = a.exec("1a23b");
	const c = a.exec("a1bc");
	const d = a.exec("12345");
	const e = a.exec("abcde");

	console.log(b[0]);//1a23b
	console.log(c); // null マッチしない
	console.log(d[0]); // 12345 数値のみ
	console.log(e[0]); // abcde 英字のみ
</script>

 

郵便番号(数値3桁とハイフンと数値4桁)+先頭と末尾も(0-9)

<script>
	const ptr = /^[0-9]{3}-[0-9]{4}$/;
	//const ptr = /^\d{3}-\d{4}$/;
	
	const b = ptr.exec("123-4567");
	const c = ptr.exec("1234567");
	const d = ptr.exec("1234-567");

	console.log(b[0]);//123-4567
	console.log(c);//null マッチしない
	console.log(d);//null マッチしない
</script>

2行目と3行目は同じ意味です。\dは、数値を意味します。[0-9]と同じです。

 

ドット(.)を文字として指定(エスケープ)

<script>
	const ptr = /a\./;
	
	const b = ptr.exec("a.");
	const c = ptr.exec("aa");

	console.log(b[0]);//a.
	console.log(c);//null マッチしない
</script>

2行目は、ドット(.)を文字として扱います。「a.」を指定しています。
エスケープとしてバックスラッシュ(ユニコードのU+005C)を前につけます。環境によっては円マークで表示されます。
ドット(.)にエスケープをつけない場合は任意の一文字という意味になります。

以下はMDNのexecメソッドのリンクです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

 

正規表現の構文とオプション

正規表現の構文として以下2つがあります。

変数 = /正規表現のパターン/オプション
変数 = new RegExp('正規表現のパターン','オプション') 

1つめは、正規表現リテラルです。
2つめは、RegExpオブジェクトのコンストラクタです。

主なオプション

オプション 説明
g マッチしたものをすべて返す(Global search.)
i 大文字と小文字の区別をしない(Case-insensitive search.)
m 複数行をマッチする

正規表現のパターン

正規表現の一覧表

関連の記事

JavaScript search 正規表現でインデックス値を返す
JavaScript test 正規表現で真偽値を返す

△上に戻る