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

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

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

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

Q&A

解決済

1回答

1518閲覧

正規表現で改行を含める場合

MISIAN-MISIAN

総合スコア73

Google Apps Script

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

0グッド

0クリップ

投稿2022/05/24 07:10

編集2022/05/24 09:58

googleメールの中身をスプレッドシートに転記させようとしています。

一部転記できない文字があります。私の見解は改行から始まっていて正規表現が正しくない認識です。
正規表現調べましたが、うまく転記できていない状況です。

下記画像のご質問・ご確認事項:のところのテストテストテスト部分を転記させたい所存です。
非エンジニアです。ご教授お願いいたします。

画像

var regMatters = new RegExp('ご質問・ご確認事項:' + '.*?'+ '\n' ); var Matters = body.match(regMatters)[0].replace('ご質問・ご確認事項:', '').replace('\n', '');

下記がコードになります。
ログ確認するとMattersに代入できていない状況です。

var sheet = SpreadsheetApp.getActiveSheet(); var data = sheet.getRange(7, 21, sheet.getLastRow() + 1).getValues(); function getMail01(){ var objSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var objSheet = objSpreadsheet.getSheetByName("お問い合わせ");  var sheet = SpreadsheetApp.setActiveSheet(objSheet); var start = 0; var max = 100; var threads = GmailApp.search('label:健康診断申込 is:unread',start,max);   var Messages = GmailApp.getMessagesForThreads(threads); var row = sheet.getLastRow() + 1; sheet.setFrozenRows(1); for(var i = 0; i < Messages.length; i++) { for(var j = 0; j < Messages[i].length; j++) { var id = Messages[i][j].getId(); if(!hasId(id)){ var body = Messages[i][j].getPlainBody(); var date = threads[i].getMessages()[j].getDate();   console.log(`body ${body}`); var regInsurerNumber = new RegExp('保険者番号:' + '.*?' + '\n'); var InsurerNumber = body.match(regInsurerNumber)[0].replace('保険者番号:', '').replace('\n', ''); var regInsurerSymbol = new RegExp('保険証記号:' + '.*?' + '\n' ); var InsurerSymbol = body.match(regInsurerSymbol)[0].replace('保険証記号:', '').replace('\n', ''); var regHealthNumber = new RegExp('保険証番号:' + '.*?' + '\n' ); var HealthNumber = body.match(regHealthNumber)[0].replace('保険証番号:', '').replace('\n', ''); var regName = new RegExp('申込者氏名:' + '.*?' + '\n' ); var Name = body.match(regName)[0].replace('申込者氏名:', '').replace('\n', ''); var regSex = new RegExp('性別:' + '.*?' + '\n' ); var Sex = body.match(regSex)[0].replace('性別:', '').replace('\n', ''); var regBirthday = new RegExp('生年月日:' + '.*?' + '\n' ); var Birthday = body.match(regBirthday)[0].replace('生年月日:', '').replace('\n', ''); var regMailAddress = new RegExp('メールアドレス:' + '.*?' + '\n' ); var MailAddress = body.match(regMailAddress)[0].replace('メールアドレス:', '').replace('\n', ''); var regPostalCode = new RegExp('郵便番号:' + '.*?' + '\n' ); var PostalCode = body.match(regPostalCode)[0].replace('郵便番号:', '').replace('\n', ''); var regAddress = new RegExp('住所:' + '.*?' + '\n' ); var Address = body.match(regAddress)[0].replace('住所:', '').replace('\n', ''); var regTelephoneNumber = new RegExp('電話番号:' + '.*?' + '\n' ); var TelephoneNumber = body.match(regTelephoneNumber)[0].replace('電話番号:', '').replace('\n', ''); var regMedicalCode = new RegExp('医療機関コード:' + '.*?' + '\n' ); var MedicalCode = body.match(regMedicalCode)[0].replace('医療機関コード:', '').replace('\n', ''); var regMedicalName = new RegExp('医療機関名:' + '.*?' + '\n' ); var MedicalName = body.match(regMedicalName)[0].replace('医療機関名:', '').replace('\n', ''); var regFirstChoice = new RegExp('第1受診希望日:' + '.*?' + '\n' ); var FirstChoice = body.match(regFirstChoice)[0].replace('第1受診希望日:', '').replace('\n', ''); var regSecondChoice = new RegExp('第2受診希望日:' + '.*?' + '\n' ); var SecondChoice = body.match(regSecondChoice)[0].replace('第2受診希望日:', '').replace('\n', ''); var regThirdChoice = new RegExp('第3受診希望日:' + '.*?' + '\n' ); var ThirdChoice = body.match(regThirdChoice)[0].replace('第3受診希望日:', '').replace('\n', ''); var regMedicalCourse = new RegExp('受診コース:' + '.*?' + '\n' ); var MedicalCourse = body.match(regMedicalCourse)[0].replace('受診コース:', '').replace('\n', ''); var regOption = new RegExp('オプション:' + '.*?' + '\n' ); var Option = body.match(regOption)[0].replace('オプション:', '').replace('\n', ''); var regMatters = new RegExp(/ご質問・ご確認事項:.*/); var regMatters1 = new RegExp(/-.*/); let startIng = body.match(regMatters).index; let endInd = body.match(regMatters1).index; var Matters = body.slice(startIng, endInd).replace('ご質問・ご確認事項:', '').replace('\n', ''); console.log(`Matters: ${Matters}`); id // 同じメールを読み込まないように、メッセージを既読にする threads[i].markRead(); sheet.getRange(row,1).setValue(date); sheet.getRange(row,2).setValue([InsurerNumber]); sheet.getRange(row,3).setValue([InsurerSymbol]); sheet.getRange(row,4).setValue([HealthNumber]); sheet.getRange(row,5).setValue([Name]); sheet.getRange(row,6).setValue([Sex]); sheet.getRange(row,7).setValue([Birthday]); sheet.getRange(row,8).setValue([MailAddress]); sheet.getRange(row,9).setValue([PostalCode]); sheet.getRange(row,10).setValue([Address]); sheet.getRange(row,11).setValue([TelephoneNumber]); sheet.getRange(row,12).setValue([MedicalCode]); sheet.getRange(row,13).setValue([MedicalName]); sheet.getRange(row,14).setValue([FirstChoice]); sheet.getRange(row,15).setValue([SecondChoice]); sheet.getRange(row,16).setValue([ThirdChoice]); sheet.getRange(row,17).setValue([MedicalCourse]); sheet.getRange(row,18).setValue([Option]); sheet.getRange(row,19).setValue([Matters]); sheet.getRange(row,20).setValue([id]); row++

イメージ説明

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

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

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

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

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

k.a_teratail

2022/05/24 07:44 編集

bodyの中身はどのような文字列になっているのでしょうか?
MISIAN-MISIAN

2022/05/24 07:55

bodyの中身は下記です。 ■申込み内容 第1受診希望日:2022年06月24日 第2受診希望日:2022年07月15日 第3受診希望日:2022年06月24日 受診コース:生活習慣病予防健診Bコース(バリウムを希望しない) オプション:腹部超音波 / 乳腺エコー ご質問・ご確認事項: テストテストテスト テスト
MISIAN-MISIAN

2022/05/24 08:31

回答いただいたコードでご質問・ご確認事項のところ転記できました。 しかしながら画像に表示してあります。下記の区切りの線も転記してしまいまいまして、こちらだけ省くことは可能でしょうか? -----------------------------------------------
k.a_teratail

2022/05/24 08:37

おっと・・・bodyの中身はこうなっていたのですね body = ・・・省略・・・ ご質問・ご確認事項: ----------------------------------------------- テストテストテスト テスト 修正しますので、少々お待ちください。
MISIAN-MISIAN

2022/05/24 08:40

すみません。body内の説明不足でした。ありがとうございます。
MISIAN-MISIAN

2022/05/24 08:41

body内下記です。 body = ・・・省略・・・ ご質問・ご確認事項: テストテストテスト テスト -----------------------------------------------
k.a_teratail

2022/05/24 08:54

回答修正しましたので、ご確認をお願いします。
MISIAN-MISIAN

2022/05/24 09:17

変更いただいたコードに変更すると。 ご質問・ご確認事項:以降が転記されなくなりました。 恐れ入りますがご教授お願いいたします。
k.a_teratail

2022/05/24 09:33 編集

> ご質問・ご確認事項:以降が転記されなくなりました。 「-----------------------------------------------」を含まず かつ 「テストテストテストテスト」が表示されるようにですよね? それとも、別の文字列を表示させることなのでしょうか? 回答にコード実施時の画像も追加しました。
MISIAN-MISIAN

2022/05/24 09:49

おっしゃる通りで 「-----------------------------------------------」を含まず かつ、ご質問・ご確認事項:以降を転記させたいです。 また、ご質問・ご確認事項:以降は本文のメールによって異なります。 本質問に詳細と現在のログの状況、追記いたしました。 ご確認とご教授お願いいたします。
k.a_teratail

2022/05/24 10:01

ご記載いただきありがとうございます。 急ぎ、修正を行います。 それと回答の内容は一時的に削除しておきます。
MISIAN-MISIAN

2022/05/24 10:08

かしこまりました。 ありがとうございます お手数おかけします。
guest

回答1

0

ベストアンサー

コードの一部抜粋になりますが、こちらでどうでしょうか?

gs

1var regMatters = new RegExp(/ご質問・ご確認事項:.*/); 2 3// bodyから「ご質問・ご確認事項:」の開始位置を取得 4let startIng = body.match(regMatters).index; 5// 「ご質問・ご確認事項:」〜「----」部分のみを取り出し、「---」の開始位置を取得 6let endInd = startIng + body.slice(startIng, body.length).match(/-.*/).index; 7 8// bodyの「ご質問・ご確認事項:」の開始位置 から「----」の開始位置までを取り出し、「ご質問・ご確認事項:」と「\n」を「空文字」に置き換える 9var Matters = body.slice(startIng, endInd).replace('ご質問・ご確認事項:', '').replace('\n', ''); 10 11console.log(`Matters: ${Matters}`);

イメージ説明

投稿2022/05/24 08:06

編集2022/05/24 10:52
k.a_teratail

総合スコア845

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

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

MISIAN-MISIAN

2022/05/25 01:17

転記できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問