[JavaScript] match 正規表現で値を返す

JavaScriptの正規表現で値を返すサンプルです。matchメソッドを使用します。

目次

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

matchメソッド

文字列.match (正規表現のパターン);
  • 正規表現のパターンで文字列を検索します。
  • 一致した場合、一致した値を配列で返します。
  • 配列のインデックスの0にマッチした該当の文字が入ります。
  • 一致しなかった場合、nullを返します。
  • Stringオブジェクトのメソッドです。

testメソッドとsearchメソッド

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

文字列を指定

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

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

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

文字をORで指定

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

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

2行目は、「A」または「E」を指定しています。
角カッコ[ ]をつけるとORになります。角カッコは、ブラケット(bracket)とも呼ばれます。

文字を否定で指定

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

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

2行目は、「A」以外の文字を指定しています。
角カッコ[ ]とハット^で否定になります。

文字を範囲で指定

<script>
const a = /[A-C]/;
const b = "ZZC".match(a);

console.log(b[0]);//C

const c = /[A-C]/g;
const d = "ABGC".match(c);

console.log(d);// ["A", "B", "C"]
</script>

2行目は、「A」または「B」または「C」の文字を指定しています。
角カッコ[ ]とハイフン(マイナス)-で範囲の指定になります。

7行目は、オプションのg(全て)を指定しています。
8行目は、オプションgのため、配列でA,B,Cが全て表示されています。

先頭の文字列を指定

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

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

2行目は、先頭が「AB」の文字を指定しています。
ハット^で先頭の文字列になります。

末尾の文字列を指定

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

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

2行目は、最後尾が「BC」の文字を指定しています。
ドルマークで末尾の文字列になります。

連続する文字を指定

<script>
const a = /c{2}/;
const b = "acccb".match(a);

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

2行目は、「c」が2回連続する文字を指定しています。
波カッコと数値で連続する文字の指定になります。

数値1桁以上を指定

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

	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 = "12345".match(a);
	const c = "a2345".match(a);
	const d = "123456".match(a);
	
	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 = "1a23b".match(a);	
	const c = "a1bc".match(a);
	const d = "12345".match(a);
	const e = "abcde".match(a);

	console.log(b[0]);//1a23b
	console.log(c); // null 5桁でない
	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 a = /^\d{3}-\d{4}$/;
	const b = "123-4567".match(ptr);
	const c = "1234567".match(ptr);
	const d = "1234-567".match(ptr);

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

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

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

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

	console.log(b[0]);//a.
	console.log(c);//null
</script>

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

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

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

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

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

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

主なオプション

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

正規表現のパターン

正規表現の一覧表

関連の記事

[JavaScript] split 文字列を配列にする(正規表現)
[JavaScript] replace 文字列を置換する(正規表現)

△上に戻る