Google Apps Scriptで正規表現でマッチした文字列から不要な部分を削除する


trim

photo credit: Symic 000ElmTreeVitality via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptでフォーム送信メールからデータを抽出してスプレッドシートに登録するツールを作成しております。

前回の記事はコチラです。

Google Apps Scriptで正規表現を使って必要な情報を抽出する最も簡単なスクリプト
Google App Scriptを使ってGmailで届いたフォーム送信情報をスプレッドシートに蓄積する方法の初回。正規表現とは何か、またGASで正規表現により文字列を抽出する最も簡単なスクリプトを紹介します。

正規表現というテクニックを使って文字列からデータを抽出する方法をお伝えしました。

例えば「名前:鈴木」「年齢:30才」という文字列のパターンを拾うことができましたが、本当に欲しいのは「鈴木」だったり、「30」だったりするわけですね。

ですから、正規表現で文字列を抽出した場合は、いらない部分をザクザク削る処理が必要になるのが一般的です。

ということで、今回はGASで正規表現で抽出した文字列から、欲しいデータのみを取り出す方法をお伝えします。

では、いってみましょう。

スポンサーリンク

前回のおさらい

では、まず前回のおさらいから。

作成したスクリプトはコチラ。

function myFunction() {
  const str = '高橋様rお世話になっております。rr名前:鈴木r年齢:30才rr以上です。';
  console.log(str.match(/名前:.*?r/g));  
  console.log(str.match(/年齢:.*?才/g));
}

冒頭に用意したstrはメール本文を意識した文字列ですが、そこから以下を抽出することができます。

  • 「名前:」ではじまって「r」(復帰)で終わる文字列のパターン、つまり「名前:鈴木n」
  • 「年齢:」ではじまって「才」で終わる文字列のパターン、つまり「年齢:30才」

今回は、ここから「鈴木」または「30」だけを残して不要な部分を削っていく処理を作っていきたいと思います。

正規表現でマッチした文字列の不要な部分を削除する

replaceメソッドで部分文字列を削除する

文字列の一部び削除はreplaceメソッドを使って実現することができます。

本来、replaceメソッドは文字列の部分文字列を置換するメソッドで以下のように書きます。

文字列.replace(部分文字列, 置換文字列)

この置換文字列を空文字(”)とすることで、部分文字列の削除と同様の処理となるというわけです。

文字列.replace(部分文字列, ”)

不要な部分を削除する処理を入れたスクリプト

これにより、前述のスクリプトをいじってみると、以下のようになります。

function myFunction() {
  const str = '高橋様rお世話になっております。rr名前:鈴木r年齢:30才rr以上です。';
  console.log(str.match(/名前:.*?r/g)[0].replace('名前:', '').replace('r', ''));  
  console.log(str.match(/年齢:.*?才/g)[0].replace('年齢:', '').replace('才', ''));  
}

matchメソッドの後の部分で「[0]」としているのは、配列から最初の要素を取り出すためです。

matchメソッドの戻り値は、パターンにマッチした文字列の配列ですからね。

ですが…ちょいと冗長ですよね。同じような処理が続いちゃっているので、整理していきましょう。

正規表現による抽出とデータの取り出しをする関数

newによる正規表現の生成

その事前準備として、正規表現の生成方法として、正規表現リテラルとは別の方法をお伝えしておきます。

JavaScriptで正規表現はRegExpオブジェクトというオブジェクトですので、newキーワードで生成をすることができます。

new RegExp(正規表現パターン, フラグ)

引数の正規表現は文字列で指定できますので、変数を使うことができます。フラグは前回の記事でお伝えしたものと同じです。

パターンマッチを抽出し必要なデータを取り出す関数

それを踏まえて、文字列strから最初の文字列preではじまり、最後の文字列sufで終わるというパターンマッチを抽出し、さらに必要なデータのみを取り出す関数fetchDataを作りました。

以下の関数fetchDataです。

function myFunction() {
  const fetchData = (str, pre, suf) => {
    const reg = new RegExp(pre + '.*?' + suf, 'g');
    const data = str.match(reg)[0]
      .replace(pre, '')
      .replace(suf, '');
    return data;  
  };
 
  const str = '高橋様rお世話になっております。rr名前:鈴木r年齢:30才rr以上です。';
  console.log(fetchData(str, '名前:', 'r'));
  console.log(fetchData(str, '年齢:', '才'));
}

これを実行すると、以下のようなログ出力が得られます。

GASで正規表現を使ってデータを抽出したログ

まとめ

以上、Google Apps Scriptで正規表現でマッチした文字列から不要な部分を削除する方法についてお伝えしました。

  • replaceメソッドで文字列の部分文字列を削除する
  • newキーワードによる正規表現の生成

ちょいと地味な内容ですが、けっこう便利ですよ…!

では、次回は実際にGmailのメッセージからデータを抽出していきますね。

Google Apps ScriptでGmailの受信メールから正規表現でデータを抽出する
Google Apps Scriptでフォーム送信メールからデータを抽出してスプレッドシートに登録するツールを作成しています。今回はGmailに届いたメールから正規表現でデータを抽出するスクリプトを紹介します。

どうぞお楽しみに!

連載目次:GASで正規表現を使ってデータを抽出&登録

正規表現を使うとGoogle Apps ScriptでメールやHTMLドキュメントからデータを抽出することができます。本シリーズでは、フォーム送信の通知メールからデータを抽出してスプレッドシートに追加するツールの作成を目指します。
  1. Google Apps Scriptで正規表現を使って必要な情報を抽出する最も簡単なスクリプト
  2. Google Apps Scriptで正規表現でマッチした文字列から不要な部分を削除する
  3. Google Apps ScriptでGmailの受信メールから正規表現でデータを抽出する
  4. Google Apps Scriptでメールから正規表現で抽出したデータをスプレッドシートに蓄積する方法
  5. Google Apps ScriptでGmailのメッセージIDを取得する方法
  6. Google Apps Scriptでスプレッドシートの列データを配列として取得する方法
  7. GASで二次元配列に特定の要素が含まれているかを判定する方法
  8. GASでフォーム送信メールからデータを取得してスプレッドシートに蓄積するツールの完全版

コメント

  1. 川田通広 より:

    これは一番求めていた機能です。
    ありがとうございました。

タイトルとURLをコピーしました