いつもお世話になっております。
GASでスプレッドシートに特定のGmailを取得させています。
文章から特定の文字を抽出していますが、検索条件に「(」を入れるとエラーになります。(下記文章の日付と時間だけを抽出したいです。「04/28/2020 08:30-11:00」)
おそらく量指定子だからと推測していますが、「(」にしても同様のエラーがでてしまいます。
この場合、どのようにしたらよいでしょうか?
【文章】
When you send the email, the reservation will be finalized.
Appointments:
- 04/28/2020 08:30-11:00 (+ USB port expansion)
Name: ふく
Phone number: 090-8765-4321
【参考にした記事】
サルにもわかる正規表現入門
2.正規表現で使用する特殊文字
メタ文字を単なる普通の文字として検索したい場合は、それらメタ文字の前に、\を付加しなければなりません。
GAS
1function contact_Gmail() { 2 var rowNumber = 2; 3 var mysheetname = 'Gmail解析_' + Utilities.formatDate(new Date(), 'JST', 'yyyyMMddHHmmss'); 4 5 var GmailSS = SpreadsheetApp.create(mysheetname); 6 var mySheet = GmailSS.getSheets()[0]; 7 mySheet.setName(mysheetname); 8 mySheet.getRange(1,1).setValue("日時"); 9 mySheet.getRange(1,2).setValue("送信元"); 10 mySheet.getRange(1,3).setValue("件名"); 11 mySheet.getRange(1,4).setValue("本文"); 12 mySheet.getRange(1,5).setValue("ご予約"); 13 mySheet.getRange(1,6).setValue("お名前"); 14 mySheet.getRange(1,7).setValue("電話番号"); 15 mySheet.getRange(1,8).setValue("メールアドレス"); 16 17 var newfolder = DriveApp.createFolder(mysheetname); 18 19 var searchQuery = 'subject:("finalized") '; 20 var threads = GmailApp.search(searchQuery, 0, 200); 21 22 var mymsg=[]; 23 24 var msgs = GmailApp.getMessagesForThreads(threads); 25 26 for(var i = 0; i < msgs.length; i++) { 27 mymsg[i]=[]; 28 for(var j = 0; j < msgs[i].length; j++) { 29 mymsg[i][0] = msgs[i][j].getDate(); 30 mymsg[i][1] = msgs[i][j].getFrom(); 31 mymsg[i][2] = msgs[i][j].getSubject(); 32 var nbsp = String.fromCharCode(160); 33 mymsg[i][3] = msgs[i][j].getPlainBody() 34 mymsg[i][4] = fetchData(mymsg[i][3],'Appointments: -','(').replace(/\s+/g, ""); 35 } 36 } 37 if(mymsg.length>0){ 38 GmailSS.getSheets()[0].getRange(2, 1, i, 5).setValues(mymsg); //シートに貼り付け 39 } 40} 41//'[^"]+' 42function fetchData(str, pre, suf) { 43 var reg = new RegExp(pre + '.*?' + suf,'s'); 44 var data = str.match(reg)[0] 45 .replace(pre, '') 46 .replace(suf, ''); 47 return data; 48}
20200505 9:55 コード修正しました。(Appointmentsの最後のsが抜けていたので修正しました。)
mymsg[i][4] = fetchData(mymsg[i][3],'Appointments: -','(').replace(/\s+/g, "");
回答2件
あなたの回答
tips
プレビュー