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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

1回答

3286閲覧

メールに記載された改行を含む問い合わせ文章を抽出したいです。

mao97

総合スコア5

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

1クリップ

投稿2019/10/29 05:53

メールに記載された改行を含む問い合わせ文章を抽出したいです。

【自由記入欄】に入力された問い合わせ文章を抜き出したいのですが、この場合はfetchData(body, )をどのように入力すればいいのでしょうか?

'【自由記入欄】' + '[\s\S]*?' + '==========================='

上記のような範囲指定などいくつかやってみたのですが表示されないため困っています。

初心者のため以前いただいた回答や調べて出てきたものをつぎはぎしながら作っている状態なのですが、どうぞよろしくお願いいたします。

メール内容は以下の通りです。

【 お名前 】 ○○○○ 【 フリガナ 】 ○○○○ ~中略~ 【 自由記入欄 】 問い合わせ文章がここに表示されます。 問い合わせ文章がここに表示されます。 問い合わせ文章がここに表示されます。 ===========================
function q219571(){ const mailQuery = ',subject:"お問い合わせ"'; //メールの件名 const threads = GmailApp.search(mailQuery); const messages = GmailApp.getMessagesForThreads(threads).reduce(function (a,h) { return a.concat(h.map(mailToArray))},[]); const sheet = SpreadsheetApp.getActiveSheet(); const r = sheet.getLastRow(); sheet.getRange(r+1, 1, messages.length, 15).setValues(messages); } function mailToArray(m) { const body = m.getPlainBody(); return [   fetchData(body, '送信された日時:', '\r'), //送信された日時を抽出   fetchData(body, '【 お名前 】', '\r'), //氏名を抽出      fetchData(body, '【 フリガナ 】', '\r'), //フリガナを抽出      fetchData(body, '【 ご住所 】', '\r'), //郵便番号を抽出      fetchData(body, '(東京都|北海道|(?:京都|大阪)府|.{2,3}県)','\r'), //県名を抽出      fetchData(body, '[府|都|道|県]', '\r'), //市以降の住所を抽出      fetchData(body, '【 電話番号 】', '\r'), //電話番号を抽出      fetchData(body, '【 メールアドレス 】', '\r'), //メールアドレスを抽出      fetchData(body, '⒈', '\r'), //きっかけを抽出      fetchData(body, '⒉', '\r'), //きっかけを抽出      fetchData(body, '⒊', '\r'), //きっかけを抽出      fetchData(body, '⒋', '\r'), //きっかけを抽出      fetchData(body, '⒌', '\r'), //きっかけを抽出      fetchData(body, '⒍', '\r'), //きっかけを抽出      fetchData(body, '', '\r'), //問い合わせ文を抽出  ]; } function fetchData(str, pre, suf) { const res = str.match(new RegExp(pre + '(.*?)' + suf)); return res === null ? '' : res[1]; }

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

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

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

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

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

papinianus

2019/10/29 15:14

コードをタダで書いてくれという作業依頼なのですから、下手に省略せず、どういうテンプレートでどういう部分が固定でどこが可変で何を取得したいかをメールの文面の実例で可能な限り具体的に示してください。
guest

回答1

0

正規表現のフラグについて、調べてみてください。
正規表現 - JavaScript | MDN

具体的にはこんな感じでしょうか。

js

1var body = function() { /* 2`【 お名前 】 ○○○○ 3【 フリガナ 】 ○○○○ 4 5~中略~ 6 7【 自由記入欄 】 8問い合わせ文章がここに表示されます。 9問い合わせ文章がここに表示されます。 10問い合わせ文章がここに表示されます。 11 12=========================== 13`; 14*/ }.toString().split('\n').slice(1, -1).join('\n'); 15 16 17function fetchData(str, pre, suf) { 18 const res = str.match(new RegExp(pre + '(.*?)' + suf, 's')); 19 return res === null ? '' : res[1]; 20} 21 22var freeText = fetchData(body, "【 自由記入欄 】", '==========================='); 23console.log("freeText = '" + freeText + "'");

投稿2019/10/29 06:49

draq

総合スコア2573

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

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

mao97

2019/10/29 08:22 編集

回答ありがとうございます!コピペさせていただいたのですが、const res = str.match(new RegExp(pre + '(.*?)' + suf, 's')); の部分に「SyntaxError: 正規表現の後のフラグが無効です。」と出てしまいました。 コードのいちばん下に貼り付けたのですが、位置が間違っているのでしょうか?それとも書いていただいたものを基に全体的に修正したほうがいいでしょうか?
papinianus

2019/10/29 08:53

いえ。sはgasではサポートされていません。なので前回回答の案になったんですが。
draq

2019/10/29 10:45

失礼しました。サポートされてないんですか。gasが古いバージョンのJavaScriptしかサポートしていないのは知っていたのですが、sフラグはサポートされていると思い込んでいました。ご指摘ありがとうございます。
papinianus

2019/10/29 14:31

厳密には確認できていません。が、私もこの案は思いついて試したのですが、どうやっても通らないのでサポートされていないと思ってます。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp からECMAをみるとECMA 2015 ですらdotAllはサポートしてないので無理っぽいです。(gasはECMA 5.1未満なので) 参考として[\s\S]+といった回避も使えませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問