量指定子について質問させてください。
下記の質問でかなり悩まされたことが、量指定子が原因ということがわかりました。
私の過去質:GASでGmailの本文を分割してスプレッドシートに転記する方法
量指定子を'.*?'から'[^"]+'に変更することでエラーが無くなり、正常にコードが動くことが確認できましたが、理由がいまだにわかりません。
GAS
1var reg = new RegExp(pre + '[^"]+' + suf);
量指定子を学んでいくと、これらの量指定子はどちらも何でも検索されるように思いますが、どのような違いがあるのでしょうか?
参考にした記事
サルにもわかる入門書
貪欲と怠惰な量指定子
量指定子 +, *, ? と {n}
正規表現パターンの記述
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().replace(/<("[^"]*"|'[^']*'|[^'">])*>|nbsp/g,'').replace(/&; | /g,'').substring(0,50000); 34 mymsg[i][4] = fetchData(mymsg[i][3],'Appointments:','Name:'); 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); 44 var data = str.match(reg)[0] 45 .replace(pre, '') 46 .replace(suf, ''); 47 return data; 48}
2020050423時追記:量指定子変更
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().replace(/<("[^"]*"|'[^']*'|[^'">])*>|nbsp/g,'').replace(/&; | /g,'').substring(0,50000); 34 mymsg[i][4] = fetchData(mymsg[i][3],'Appointments:','Name:'); 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,'m'); 44 var data = str.match(reg)[0] 45 .replace(pre, '') 46 .replace(suf, ''); 47 return data; 48}
回答1件
あなたの回答
tips
プレビュー