ywork2020.com

Title

正規表現に該当する内容を配列として取得する

目次 (INDEX)

execとは

ここで説明するexec とは次の語句からなるjavascriptのメソッドです。
execution, execute
読み: エグゼキューション、エグゼキュート
意味: 実行

目次に戻る

execメソッドの概要

このメソッドは、正規表現オブジェクトで検索し、パターンに該当する内容を配列で返します。 また、パターンに該当しなかった場合はnullを返します。

配列として返った値にはvalueOf()やtoString()で取得できるのプロパティ値の他、index、inputなどのプロパティを含みます。

このメソッドは繰り返し使用するたびに前回の試行の一致位置をlastIndexに格納し次回の試行開始位置とするため、 while文を使った繰り返し処理を行い、戻り値がnullになったとろこでブロックを抜けるのが妥当であろうと考えます。

目次に戻る

構文

サンプルを見る前に構文を確認しておきます。

var array = ##RegExp.exec(Str);

目次に戻る

サンプルコードと実行結果

ここではexec()で取得した配列を更に正規表現パターンに該当する数だけ配列として代入しています。 これは2次元配列と解釈できます。

サンプルコード: CSS
<style>
	#idDiv{
		border: thin solid ##blue;
		background-color: ##aliceblue;
		padding: 1em;
	}
</style>
サンプルコード: HTML
<body>
	<div id="idDiv">
		This site is ywork.<br>
		HELLO WORLD.<br>
		hello every one.<br>
		Hello blah-blah-blah.
	</div>
	<script>...</script>
</body>
  • 02-07: div (この要素のコンテンツを正規表現オブジェクトで検索します。)
  • 08: script (プログラムを実行します。)
サンプルコード: script
<script>
	let elmDiv = document.getElementById("idDiv");
	let objRegExp = new RegExp(/hello/flag=gflag=i);
	let arrGet = [];
	let arrGetAll = [];
	while((arrGet = objRegExp.exec(elmDiv.innerText)) !== null){
		arrGetAll.push(arrGet);
	}
	for(let i = 0; arrGetAll.length > i; i++){
		document.write(
			"value: " + arrGetAll[i].valueOf(),
			" / ",
			"index: " + arrGetAll[i].index,
			"<br>"
		);
	}
</script>
  • 03: objRegExp (正規表現オブジェクトを生成します。)
  • 04: arrGet (正規表現に該当する内容を代入するための配列です。)
  • 05: arrGetAll (arrGetを2次元配列として代入するための配列です。)
  • 06-08: while文 (.exec()で取得した配列をarrGetに代入します。取得値がnullになったらブロックを抜けます。)
  • 07: .push(arrGet) (arrGet配列をarrGetAll配列に追加していきます。)
  • 09-16: for文 (arrGetAllの配列数まで[i]を増加しながら、繰り返し.valueOf()と.indexの値を書き出します。)
実行結果:
This site is ywork.
HELLO WORLD.
hello every one.
Hello blah-blah-blah.

目次に戻る