LANG SELRCT

Apps Script Reference  (Create: Create new Spreadsheet | Create new Apps Script

Monday, October 28, 2019

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


補足3

特殊文字を含む場合はエスケープが必要

たとえば以下のようなURLを完全一致で検索する場合

var value = "https://drive.google.com/file/d/ID/view?usp=drivesdk";
var pattern = "^" + value.replace(/\//g, "\\/").replace(/\?/g, "\\?").replace(/\=/g, "\\=") + "$";
var textFinder = sheet.createTextFinder(pattern).useRegularExpression(true);

手元ではこれでいけた。


参考

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

https://teratail.com/questions/197111

Latest post

スプレッドシートA列にある複数のテキストをスライドに追加したい(Google Apps Script)

今回Google Apps Scriptでやりたいこと GoogleスプレッドシートA列にある複数の値を取得して Googleスライドに渡して 図形オブジェクトのテキストとして追加したい ① スプレッドシートのA列に値を入れておく ② Code.gsのinsertNewShape...