質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

12662閲覧

[GAS]特定の文字以降の文字を取得したい

ntttt

総合スコア49

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

1クリップ

投稿2020/12/21 05:55

GASでgmailに届いたお問い合わせをスプレッドシートに転記されるようにしたいです。
スプレッドシートに転記されるところまではできたのですが、今のコードでは以下の写真のように「【問診表記入日】」などのタイトルまで含まれてしまいます。

イメージ説明

「】」以降の文字列を取得するには、どのように記述したら宜しいでしょうか?

お知恵を拝借出来たら、幸いです。
よろしくお願い致します。

GAS

1function searchContactMail() { 2 3 const title = 'subject:お問い合わせ'; 4// const start = 0; 5// const max = 10; 6 const threads = GmailApp.search(title); 7 const messagesForThreads = GmailApp.getMessagesForThreads(threads); 8 const values = []; 9 const sheet = SpreadsheetApp.getActiveSheet(); 10 const lastRow = sheet.getLastRow(); 11 12 for(const messages of messagesForThreads){ 13 const message = messages[0]; 14 var plainBody = message.getPlainBody(); 15 Logger.log(plainBody); 16 const record = [ 17 message.getId(), 18 plainBody.match(/【問診表記入日】(.*)/), 19 plainBody.match(/【お名前】(.*)/), 20 plainBody.match(/【ふりがな】(.*)/), 21 plainBody.match(/【性別】(.*)/), 22 plainBody.match(/【生年月日】(.*)/), 23 plainBody.match(/【年齢】(.*)/), 24 plainBody.match(/【血液型】(.*)/), 25 plainBody.match(/【体重】(.*)/), 26 plainBody.match(/【身長】(.*)/), 27 plainBody.match(/【結婚】(.*)/), 28 plainBody.match(/【郵便番号】(.*)/), 29 plainBody.match(/【住所】(.*)/), 30 plainBody.match(/【居住】(.*)/), 31 plainBody.match(/【電話番号】(.*)/), 32 plainBody.match(/【メールアドレス】(.*)/) 33 ]; 34 values.push(record); 35 Logger.log(record); 36 } 37 38 if(values.length > 0){ 39 sheet.getRange(lastRow + 1, 1, values.length, values[0].length).setValues(values); 40 } 41 42  const label = GmailApp.getUserLabelByName('処理済み'); 43  threads.forEach(thread => thread.addLabel(label)); 44 45}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

plainBody に必ず 【問診表記入日】 が存在するなら、plainBody.match(/【問診表記入日】(.*)/)[1]で () に囲まれたキャプチャグループの値を取得出来ます。

存在しない場合はplainBody.match()nullを返すので、nullチェックしてからインデックスが 1 の値を取得してください。関数にして共通化すると楽です。

const extractValue = (text, title) => { const matches = text.match(`【${title}】(.*)`); if (matches) { return matches[1]; } return ""; }; const record = [ message.getId(), extractValue(plainBody, "問診表記入日"), extractValue(plainBody, "お名前"), /* 省略 */ ];

詳しくは MDN の解説をどうぞ。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/match

投稿2020/12/21 06:33

draq

総合スコア2573

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ntttt

2020/12/21 10:32

ご教授頂き、ありがとうございました。 draqさんのお陰で、実装ことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問