LANG SELRCT

コードを書く場所

2019年6月24日月曜日

正規表現でAND検索を試してみる1


対象の文字列の中に指定した文字がすべて存在するか知りたい

対象の文字列がABOで


指定文字がAとOの場合:
  1. ABOの中にAが存在するかを見る
  2. 存在しなければfalseを返す
  3. 存在すればOが存在するか見る
  4. 存在しなければfalseを返す
  5. 存在すればtrueを返す

結果、5まで実行してABOの中にAとOは存在するのでtrueを返す


指定文字がACの場合:
  1. ABOの中にAが存在するかを見る
  2. 存在しなければfalseを返す
  3. 存在すればCが存在するか見る
  4. 存在しなければfalseを返す
  5. 存在すればtrueを返す

結果、4まで実行してABOの中にAは存在するが、Cは存在しないのでfalseを返す



コード.gs
function myFunction() {
  var str = 'ABO';
  var target = 'AO';
  var conjunction = getAndConditional(str, target);
  Logger.log(conjunction);
}

function getAndConditional(str, target) {
  var values = target.split('');
  for(var i = 0; i < values.length; i++) {
    var regexp = new RegExp(values[i]);
    if(regexp.test(str) === false) {
      return false;
    }
  }
  return true;
}

意訳
この機能がやること
対象の文字列
探したい文字列
対象の文字列の中に、探したい文字列がすべて含まれるか判定して
ログにtrue, falseで出力する


この機能がやること
targetの文字列を一つずつ分けて
文字数の数だけ繰り返す
/A/のパターンを作って
strの中に含まれなければ
falseを返す


最後までfalseが返らなければtrueを返す




ちょっと書き換えて、valuesを配列にして渡す
var values = ['A', 'O'];

コード2.gs
function myFunction() {
  var str = 'ABO';
  var values = ['A', 'O'];
  var conjunction = getAndConditional(str, values);
  Logger.log(conjunction);
}

function getAndConditional(str, values) {
  for(var i = 0; i < values.length; i++) {
    var regexp = new RegExp(values[i]);
    if(regexp.test(str) === false) {
      return false;
    }
  }
  return true;
}


補足

ABO の中に A があるかどうかは

function myFunction() {
  var str = 'ABO';
  var result = /A/.test(str);
  Logger.log(result);
}

上記のように書けるので
同じように B があるか、Oがあるかを繰り返し見ていく
ということをコード1, 2でやっています



関連記事

正規表現でAND検索を試してみる2