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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

8257閲覧

GASの正規表現と文字列一致

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/06/11 17:15

前提・実現したいこと

文字列を入力→部分一致を検出
できる検索機能を実現したい

発生している問題・エラーメッセージ

完全に一致した文字列の一致を問うても答えは否。↓

該当のソースコード

GoogleAppsScript

1function myFunction() { 2 var str = "だにんぐくるーがーこうか"; 3 var word = "だにんぐくるーがーこうか"; 4 if(str.match(/word/)) { 5 Logger.log(true); 6 } 7}

log

1なし(本来trueを意図している)

試したこと

str.match(/だにんぐくるーがーこうか/)としたらtrueが返ってきた。
故に、matchの使い方、正規表現の扱い、型の扱いが間違っているものと思われるが、googol(わかる人はわかる)検索しても該当する案件は見受けられなかった。(既出だったら申し訳ない。)

余談

今作っているのは自作したクイズを表にまとめ、キーワードを検索すれば対応した問題と答えが返ってくる…みたいなプログラム。この部分以外は動作確認できたのですが、どうしてもここだけ。
時短のためにgetvaluesを使って配列でデータを引っ張ってきていて、問題番号とかも混ざっているのでString(not文字列)とか使って無理やりstring型にできたのに、できたのに、ここで躓くのか…。(夜中2時の叫び)

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

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

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

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

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

guest

回答2

0

if(str.match(/word/)) {

これではwordという文字列が含まれているかをチェックすることになります。

試してませんが、多分こんな感じ。

var word = /だにんぐくるーがーこうか/; if(str.match(word){

投稿2019/06/11 18:14

KojiDoi

総合スコア13671

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

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

退会済みユーザー

退会済みユーザー

2019/06/11 21:24

すると、こちらもまた試してませんが、 var word = /array[][]/ としたら、やはり"array[][]"が含まれているかどうかをチェックしてしまう…のですかね?
papinianus

2019/06/11 22:09

横から失礼。 その理解で基本正しいですが、[]は正規表現で特殊な意味を持つので、/array[][]/などどエスケープする必要があります。
退会済みユーザー

退会済みユーザー

2019/06/11 23:58

papinianusさん ご指摘ありがとうございます(*´꒳`*)
退会済みユーザー

退会済みユーザー

2019/06/13 15:32

KojiDolさん 回答ありがとうございます(*^^*) いやあ、//の中に変数名入れてもそれ自体が正規表現になってしまうんですね…。(確かにパソコン側からすればあたりまえ) 自己解決回答の追記に記したとおりです。ありがとうございました!
guest

0

ベストアンサー

一応半分自己解決したので、備忘録も兼ねて…。

GoogleAppsScript

1function myFunction() { 2 var array = [[1, "伊藤博文"],[2, "黒田清輝"],[3, "三条実美"]]; //検索する配列 3 var word = "黒田清輝"; //検索する内容 4 5 word = new RegExp(word); //wordを正規表現wordに 6 7 var search = ""; 8 var result = []; 9 10 for(var i = 0; i < array.length; i++) { 11 for(var j = 0; j < array[i].length; j++) { 12 search = String(array[i][j]); //検索対象を文字列に 13 if(search.match(word)) { 14 result.push([i+1]); //i+1(ようは伊藤博文→1に対応する番号)を出力配列にpush 15 break; //再び一個目のforへ 16 } 17 } 18 } 19 20 〇〇.getRange().setValues(result); 21 Logger.log(result); 22}

ポイント
◎正規表現を使って検索する→newで新しいRegExp型に変換→match()で使う
◎matchプロパティを使う場合→予めString()で文字列化する

今後この投稿を見た方に影響を及ぼしてしまう程の誤植がありましたら、(方法はよくわかんないんですけど)教えてくださいm(_ _)m

P.S.(2019/06/14 00:29)
先の回答者様より「/word/」自体が正規表現になっているということを教えていただきましたが、都合上「/変数/」とする必要があり、それをもとにgoogol検索したところ「=new RegExp()」を発見したので、それをもとにこの自己解決回答を作成しました。ありがとうございました。

投稿2019/06/13 15:23

編集2019/06/13 15:29
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問