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

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

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

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

Q&A

解決済

1回答

6357閲覧

GAS indexOfメソッドで複数文字列を検索したい

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

0グッド

1クリップ

投稿2017/08/27 09:18

GASで変数に代入した長いテキスト文から、
複数の検索ワードのうち1つでも一致するかどうか調べるものを作りたいと思っています。
しかし、何度かやってみたのですが、以下コードの場合であれば"xxxx"しか検索を実行していなさそうです。

質問ですが以下コードであれば全てのワードを検索実行できていますでしょうか。
できていない場合どのように書き直すべきでしょうか。
お手数お掛け致しまして申し訳ないです。

※利用イメージはGmailの本文を調べて、
特定の文字列を含む場合はアラートを出せるようにしたいのです。

var test var sub = str.indexOf("xxxx"||"yyyy"||"zzzz"||"ffff"||"dddd"); if(sub != -1){test = '一致';}

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず、ソースについて軽くコメントを。

// ;を忘れている。なくても動くが、つけるべき。 var test // strってなんですか? おそらくGmailの本文が入った文字列が入っているのだと思いますが。 var sub = str.indexOf("xxxx"||"yyyy"||"zzzz"||"ffff"||"dddd"); if(sub != -1){test = '一致';}

strというのが別に与えられているとして、
確かにこれでは期待通り動作しません。

こうした場合はindexOfを使うのではなく、例えばmatchを使って

var test; var sub = str.match(/xxxx|yyyy|zzzz|ffff|dddd/); // matchの場合、該当なしならばnullを返すため、変更 if(sub !== null){test = '一致';}

と書くと、期待通り動くと思います。

追記

禁止文字がたくさんあるとき、上では対応するのが大変になるので、
そういうときにはindexOfを使ったほうがよいかもしれません。例えばこのような関数を書いてみました。

/**  mailTextに、forbiddenWords中に指定された文字列が一つでもあればtrue,一つもなければfalseを返す @param {string} mailText メール本文の文字列 @param {Array<string>} forbiddenWords 禁止文字の配列 **/ function isIncludedForbiddenWords(mailText,forbiddenWords){ return forbiddenWords.some(function(word){return (mailText.indexOf(word) !== -1);}); }

投稿2017/08/27 10:05

編集2017/08/27 10:35
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/08/28 01:27

>>TKatayamaさん ご回答大変ありがとうございます。 お蔭様で無事動きました。 追記頂いた関数は私の勉強不足で大変申し訳ないですが、 構造を理解するまで参考書を片手に読む必要がありそうです。 こちら理解し次第活用させて頂きます。 本当に助かりました! ありがとうございます。
退会済みユーザー

退会済みユーザー

2017/08/28 01:28

一つ忘れていました。 strも別でvar = strで割当てていたのですが、 記載漏れておりました。申し訳ないです。getplaintextでメール本文を代入しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問