ray88’s diary

お仕事で困ったとき用の自分用の覚書

JavaScript 正規表現による文字列の検索① excecメソッド

正規表現 目次 - ray88’s diary
JavaScript 目次 - ray88’s diary
JavaScript 正規表現・RegExp オブジェクト 宣言とフラグ・メソッド - ray88’s diary
JavaScript 正規表現による文字列の検索② Stringオブジェクトのmatchメソッド - ray88’s diary
JavaScript 正規表現による文字の置換・分割 stringオブジェクトのreplaceメソッドとsplitメソッド - ray88’s diary
※一般的にマッチした文字列全てを取り出すのであればstringオブジェクトのmatchメソッドを使用するほうが簡単に実現できる。ただし、matchメソッドではlastIndexプロパティの書き換えがされないため、マッチした文字列の位置が必要な場合はexceメソッドを使用するのが有効。
■excec メソッド
 ・文字列を検索し、正規表現にマッチした最初の文字列を1つだけ含む配列を返す
 ・正規表現にgフラグが付与されていれば、正規表現の lastIndex プロパティの値を
  マッチした部分の次の位置を表す数値におきかえる
 ・再度excecメソッドを実行した場合、前回の続きから検索を開始する
 ・戻り値の配列に含まれる「Input:~」「Input:~」は拡張プロパティといい、
  その配列のプロパティとして取り出すことができる
 ・マッチする文字列がない場合はnullを返す
 【サンプルコード①】

function myFunction(){
  const str = "I'm Bob. Tom is my friend."
  //構文:/正規表現/フラグ
  const reg = /.o./g;
  console.log(reg.exec(str));
}


 【サンプルコード②】

function myFunction(){
  const str = "I'm Bob. Tom is my friend."
  //構文:/正規表現/フラグ
  const reg = /.o./g;

  let result;
  //excecメソッドでマッチする文字列がある間だけ繰り返す
  while (result = reg.exec(str)){
    //マッチした文字列result[0]と、indexプロパティの値をログ出力する
    console.log(`result:${result[0]},lastIndex:${result.index}`);
  }
}


◆メモ◆
●excecメソッドおよび正規表現にgフラグを付与しない場合のmatchメソッドの
 戻り値は「最初の検索結果とサブマッチ文字列および拡張プロパティで構成された
 配列となる。
●サブマッチ文字列とは、正規表現内に丸カッコでグルーピングされた部分
 (サブマッチパターン)にマッチした文字列のこと