LANG SELRCT

コードを書く場所

2019年10月28日月曜日

TextFinderで正規表現を使って検索したい


TextFinderで正規表現を使いたくて書きました。

AND検索をしたかったので

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

でやった正規表現を使います。


各々設定する箇所
  • SPREADSHEET_URL
  • 文字列1
  • 文字列2

を設定してfindAllRows()を実行すると
正規表現に一致する行が取得できます。


コード.gs
function findAllRows(){
  var rows = [];
  var ss_url = 'SPREADSHEET_URL';
  var ss = SpreadsheetApp.openByUrl(ss_url);
  var sheet = ss.getSheets()[0];

  var textFinder = sheet.createTextFinder("^(?=.*文字列1)(?=.*文字列2)").useRegularExpression(true);
  var ranges = textFinder.findAll();
  for ( var i = 0; i < ranges.length; i++ ) {
      rows.push(ranges[i].getRow()) ;
  }
  Logger.log(rows);
}




補足1

複数のセルをまたいで抽出するには別途ループ処理などの対応が必要です。

たとえば

"^(?=.*あめ)(?=.*がむ)"

とした時

A1セルに「あめ、がむ」←同じセル内なのでHITする
A2セルに「あめ」B2セルに「がむ」←セルが異なるのでHITしない


補足2

セルに改行が入っている場合はこれでいけた

"^(?=.*文字列1[\\s\\S])(?=.*文字列2[\\s\\S])"


こちらを参考にさせていただきました。
https://teratail.com/questions/197111


参考

useRegularExpression(useRegEx)
https://developers.google.com/apps-script/reference/spreadsheet/text-finder.html#useRegularExpression(Boolean)

https://teratail.com/questions/197111