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

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

searchメソッド

変数 = 検索対象の文字列 .search(正規表現のパターン);
  • 正規表現のパターンで文字列を検索します。
  • 一致した場合、マッチした箇所のインデックスを返します。
  • 一致しなかった場合、-1を返します。
  • インデックスは0から始まります。
  • Stringオブジェクトのメソッドです。

 

文字列を指定

<script>
const a = /BC/;

console.log("BCA".search(a));//0 マッチした箇所のインデックス
console.log("ABC".search(a));//1 マッチした箇所のインデックス
console.log("ABA".search(a));//-1 マッチしない
</script>

2行目は、文字列「BC」を指定しています。

 

文字をORで指定

<script>
const a = /[AB]/;

console.log("ABC".search(a));//0 マッチした箇所のインデックス
console.log("ZAZ".search(a));//1 マッチした箇所のインデックス
console.log("ZZB".search(a));//2 マッチした箇所のインデックス
console.log("ZZZ".search(a));//-1 マッチしない
</script>

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

 

文字を否定で指定

<script>
const a = /[^AB]/;

console.log("AZZ".search(a));//1 マッチした箇所のインデックス
console.log("BZZ".search(a));//1 マッチした箇所のインデックス
console.log("ZAZ".search(a));//0 マッチした箇所のインデックス
console.log("ABA".search(a));//-1 マッチしない
</script>

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

 

文字を範囲で指定

<script>
const a = /[A-C]/;

console.log("ABC".search(a));//0 マッチした箇所のインデックス
console.log("ZZC".search(a));//2 マッチした箇所のインデックス
console.log("ZZZ".search(a));//-1 マッチしない
</script>

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

 

先頭の文字列を指定

<script>
const a = /^AB/;

console.log("ABC".search(a));//0 マッチした箇所のインデックス
console.log("ACB".search(a));//-1 マッチしない
</script>

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

 

末尾の文字列を指定

<script>
const a = /BC$/;

console.log("ABC".search(a));//1 マッチした箇所のインデックス
console.log("ACB".search(a));//-1 マッチしない
</script>

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

 

連続する文字を指定

<script>
const str1= /c{2}/;

console.log("acccb".search(str1));//1 マッチした箇所のインデックス
console.log("accb".search(str1));//1 マッチした箇所のインデックス
console.log("acbc".search(str1));//-1 マッチしない
</script>

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

 

1桁以上を指定

<script>
	const ptr = /[0-9]{1,}-/;
	
	console.log("1-".search(ptr));//0 マッチした箇所のインデックス
	console.log("123-".search(ptr));//0 マッチした箇所のインデックス
	console.log("ab1-".search(ptr));//2 マッチした箇所のインデックス
	console.log("a1b-".search(ptr));//-1 マッチしない
</script>

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

 

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

<script>
	const a = /^[0-9]{5}$/;
	
	console.log("12345".search(a)); //0 マッチした箇所のインデックス
	console.log("123".search(a)); //-1 マッチしない
	console.log("a2345".search(a)); //-1 マッチしない
</script>

 

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

<script>
	const ptr = /^[0-9a-f]{5}$/;

	console.log("1a23b".search(ptr));//0 マッチした箇所のインデックス
	console.log("a1bc".search(ptr)); // -1 マッチしない
	console.log("12345".search(ptr)); // 0 マッチした箇所のインデックス
	console.log("abcde".search(ptr)); // 0 マッチした箇所のインデックス
</script>

 

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

<script>
	const a = /^[0-9]{3}-[0-9]{4}$/;
	//const a = /^\d{3}-\d{4}$/;
	
	console.log("123-4567".search(a));//0 マッチした箇所のインデックス
	console.log("1234567".search(a));//-1 マッチしない
	console.log("1234-567".search(a));//-1 マッチしない
</script>

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

 

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

<script>
	const ptr = /\./;

	console.log("a.".search(ptr));// 1 マッチした箇所のインデックス
	console.log("ab.".search(ptr));// 2 マッチした箇所のインデックス
	console.log("abc.".search(ptr));// 3 マッチした箇所のインデックス
</script>

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

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

 

正規表現の構文

正規表現の構文として以下2つがあります。
1つめは、正規表現リテラルです。
2つめは、RegExpオブジェクトのコンストラクタです。

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

主なオプション

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

正規表現のパターン

正規表現の一覧表

関連の記事

JavaScript replace 文字列を置換する(正規表現)
JavaScript test 正規表現で真偽値を返す

△上に戻る