テキストで動作すると正しく結果が反映されるのに対し、RegExpを使って抽出したものに対してmatchAllの結果が反映されません。
テキストとして認識されていないのかとvar RegOrderに対して.toString();を使ったりもしましたが問題は解決されず...
RegOrderをconsole.logで書き出し、書き出された内容で個別にテキストで動作したところ希望の動作をしていたためRegOrderの中の文字列自体に間違いはないものと思われます。
原因が分かる方がいましたらお教え願います。
GoogleAppsScript
1 var start = 0; 2 3 // 取得するメールの最大件数 4 var max = 100; 5 6 // Gmailのラベル名 7 var threads = GmailApp.search('label:発注情報 is:unread',start,max); 8 9 var Messages = GmailApp.getMessagesForThreads(threads); 10 11 12 13 // メールから要項を取り出す// 14 for(var i = 0; i < Messages.length; i++) { 15 for(var j = 0; j < Messages[i].length; j++) { 16 17 var body = Messages[i][j].getPlainBody(); 18 19 var order = new RegExp('--'+'[\s\S]*?'+'=='); 20 var RegOrder = body.match(order)[0]; 21 22 23 var results = RegOrder.matchAll(/^.*? +[\d,]+円 +(?<count>[\d,]+)個 +[\d,]+円\n[(?<model>.*?)]\n(?<content>(?:.*?\n)+?)(?=^.*?\n[|=+)/mg); 24 25 var mailTitle = ""; 26 var mailBody = "\n"; 27 for (const result of results) { 28 mailTitle += (result.groups.model + "・").repeat(result.groups.count); 29 var modelAndContent = result.groups.model + '\n' + result.groups.content; 30 if (modelAndContent.slice(-2) !== '\n\n') { 31 modelAndContent += '\n'; 32 } 33 mailBody += modelAndContent.repeat(result.groups.count) 34} 35if (mailTitle.length > 1) { 36 mailTitle = mailTitle.slice(0, -1); 37} 38 39console.log("メールタイトル: " + mailTitle) 40console.log("内容: " + mailBody)
result
1メールタイトル: 2内容:
GoogleAppsScript
1//テキストで動作させる場合 2function myFunction() { 3 var RegOrder = (function() {/* ------------------------------------------------------------------------- 4商品名A 10,000円 1個 10,000円 5[商品型番A] 6色:黒 7サイズ:22.5 8素材:エナメル 9オプション:ーー 10 11商品名B 5,000円 2個 5,000円 12[商品型番B] 13色:黒 14サイズ:22 15素材:革 16========================================================================= 17*/}).toString().match(//*\n*([^]*)*//)[1]; 18 19 20 var results = RegOrder.matchAll(/^.*? +[\d,]+円 +(?<count>[\d,]+)個 +[\d,]+円\n[(?<model>.*?)]\n(?<content>(?:.*?\n)+?)(?=^.*?\n[|=+)/mg); 21 22 var mailTitle = ""; 23 var mailBody = "\n"; 24 for (const result of results) { 25 mailTitle += (result.groups.model + "・").repeat(result.groups.count); 26 var modelAndContent = result.groups.model + '\n' + result.groups.content; 27 if (modelAndContent.slice(-2) !== '\n\n') { 28 modelAndContent += '\n'; 29 } 30 mailBody += modelAndContent.repeat(result.groups.count) 31} 32if (mailTitle.length > 1) { 33 mailTitle = mailTitle.slice(0, -1); 34} 35 36console.log("メールタイトル: " + mailTitle) 37console.log("内容: " + mailBody)
result
1メールタイトル: 商品型番A・商品型番B・商品型番B 2商品型番A 3色:黒 4サイズ:22.5 5素材:エナメル 6オプション:ーー 7 8商品型番B 9色:黒 10サイズ:22 11素材:革 12 13商品型番B 14色:黒 15サイズ:22 16素材:革 17
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/08 11:58
2020/09/08 14:52
2020/09/09 07:03