Apps Scriptリファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

2018年1月27日土曜日

match, exec, test, searchで文字列探索したときの違いを知りたい


以下4つを使って一致する文字列を正規表現で探してみます
  • match:見つかった文字列を返す
  • exec:見つかった文字列を返す
  • test:見つかったらtrue, 見つからなかったらfalseを返す
  • search:見つかった位置を返す

matchとexecの違いについては g をつけて試してみました



コード.gs
function get_results(){//一致した文字列が配列に返ってくる
  var str = "abc123";
  var pattern = /123/;
  var mat = str.match(pattern);
  var exe = pattern.exec(str);
  var tes = pattern.test(str);
  var sea = str.search(pattern);
  Logger.log([mat, exe,tes, sea]);
}
意訳
この機能がやること
探索対象の文字列を用意する(この中から特定のパターンに一致する文字列を探したい)
探索する文字列のパターンを用意する(正規表現で)
一致した文字列をそのまま返して
一致した文字列をそのまま返して
一致した文字列があればtrue, なければfalseを返して
一致した文字列の開始位置を返して
ログに出す







matchとexecの違いは?

var pattern = /123/;
の場合は違いはない

var pattern = /123/g;
にすると結果が異なる

matchは一致するパターンをすべて返す
execは一致するパターンを一つずつ返していく



コード.gs
function get_results() {
  var str = "abc123abc123";
  var pattern = /123/g;
  var mat = pattern_match(str, pattern);
  var exe = pattern_exec(str, pattern);
  Logger.log([mat, exe]);
}

function pattern_match(str, pattern) {
  var array = [];
  var results = str.match(pattern);
  for (var i = 0; i < results.length; i++) {
    array.push(results[i])
  }
  return array;
}

function pattern_exec(str, pattern) {
  var array = [];
  while (pattern.exec(str) !== null) {
    array.push("発見!次の探索開始位置は" + pattern.lastIndex);
  }
  return array;
}
意訳
この機能がやること
探索対象の文字列を用意する(この中から特定のパターンに一致する文字列を探したい)
探索する文字列のパターンを用意する(正規表現で)
matchで一致する結果を取得して
execで一致する結果を取得して
ログに出す


この機能がやること
結果の入れ物を用意して
strの中にpatternに一致する文字列をすべて取得する
見つけた数だけ以下を繰り返す
arrayに見つけた文字列を追加する

すべて追加されたarrayを返す


この機能がやること
結果の入れ物を用意して
strの中でpatternに一致する文字列がなくなるまで探す
見つけたら次の探索開始位置とともにarrayに追加する

すべて追加されたarrayを返す






参考

String.prototype.match() - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/match

RegExp.prototype.exec() - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

RegExp.prototype.test() - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test

String.prototype.search() - JavaScript | MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/search

Latest post

Googleドキュメントに見出しを追加したい

今回の例では、ドキュメントの末尾に「見出しD」 を追加します。 見出しA, B, C, Dのスタイルは、見出し3 ( HEADING3 ) に設定しています。  下記Code.gsの  GOOGLE_DOCUMENT_URL を設定して  addHeadingToEnd()  を...