前回まではメールの本文から特定の文字列を抽出する方法、そして「正規表現」の使い方でした。今回は実際に抽出を実行してみたいと思います。
new RegExp
まずは前回と同じですが、GASで正規表現を扱うときには「RegExp」を使います。
const regtxt = new RegExp('作家名: + '.*?' + '\r' );
これで、変数regtxtに正規表現の状態で格納されることになります。
現在までのコードはこちら
function searchContactMail() {
const search_text = '"銀河鉄道の夜"';
const threads = GmailApp.search(search_text, 0, 1);
const messagesThreads = GmailApp.getMessagesForThreads(threads);
//メッセージ全文
const messe_body = messagesThreads[0][0].getPlainBody();
SpreadsheetApp.getActiveSheet().getRange(2, 1).setValue(messe_body);
//抽出を開始
const regtxt = new RegExp('作家名:' + '.*?' + '\r' );
//B2セルに書き込む
// SpreadsheetApp.getActiveSheet().getRange(2, 2).setValue();
}
正規表現
まずは、以前にも書いた「正規表現」を使って不要な部分を削除していきます。
const regtxt = new RegExp('作家名:' + '.*?');
const txtreplace = messe_body.match(regtxt)[0].replace('作家名: ', '');
こうすると、「作家名:」の部分のみが抽出(一致)した(.*?=最左最短マッチ)ということになります。
:の右側だけを抽出する
ここに「\r リターン(制御コード 0x0d)」を付け加えてみます。
const regtxt = new RegExp('作家名:' + '.*?' + '\r' );
const txtreplace = messe_body.match(regtxt)[0].replace('作家名: ', '');
こうすると、regtxtでマッチするパターンが見つかったら抽出できるので、今回の場合ですと、
作家名: 宮沢 賢治
の文字が「txtreplace」に入り、そして「.replace(‘作家名: ‘, ”)」によって作家名:が削除された結果、
宮沢 賢治
という文字だけが残る、ということになりました。
抽出処理、実行。
あとは、各列用の変数を準備して、順番に格納していけば、本文内の特定の文字だけを各セルに入れていくことができる、ということになります。
const search_text = '"銀河鉄道の夜"';
const threads = GmailApp.search(search_text, 0, 1);
const messagesThreads = GmailApp.getMessagesForThreads(threads);
//メッセージ全文
const messe_body = messagesThreads[0][0].getPlainBody();
SpreadsheetApp.getActiveSheet().getRange(2, 1).setValue(messe_body);
const regtxt1 = new RegExp('作家名:' + '.*?' + '\r' );
const txt1 = messe_body.match(regtxt1)[0].replace('作家名: ', '');
const regtxt2 = new RegExp('作家名読み:' + '.*?' + '\r' );
const txt2 = messe_body.match(regtxt2)[0].replace('作家名読み: ', '');
const regtxt3 = new RegExp('生年:' + '.*?' + '\r' );
const txt3 = messe_body.match(regtxt3)[0].replace('生年: ', '');
//抽出した変数
SpreadsheetApp.getActiveSheet().getRange(2, 2).setValue(txt1);
SpreadsheetApp.getActiveSheet().getRange(2, 3).setValue(txt2);
SpreadsheetApp.getActiveSheet().getRange(2, 4).setValue(txt3);
結果
↓実行
抽出結果↓
抽出できました!!
あとは、ループなりで回していけば、特定条件でのメール本文を一気に集めることもできるような気がします。
正規表現の部分が怪しいので・・・「もっとこんな方法使ったらいいですよ」などあれば、教えて頂けると嬉しいです!
ご参考下さい^o^)/