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

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

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

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

Q&A

解決済

2回答

1726閲覧

GASのdo-while文の条件[match関数の戻り値=null]になっても抜けられない

akiaki-t

総合スコア20

Google Apps Script

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

0グッド

0クリップ

投稿2023/02/17 15:45

実現したいこと

GASのdo-while文の条件[match関数の戻り値=null]になったらdo-while文を抜けたい

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

do-while文で指定した条件"match関数で戻り値がnull"になってもdo-while文が終わらない

該当のソースコード

GAS

1var targetDoc = DocumentApp.openById(fileId); 2 3// このdocTextは改行を含む100行ちょっとの文章です。 4var docText = targetDoc.getBody().getText(); 5 6let body = docText; 7console.log("body = " + body); 8 do { 9 // targetwordは必ず1回以上 出現します。 10 body = body.replace(targetWord,replaceWord); 11 console.log("body = " + body); 12 13 var isMatch= new RegExp(body.match(targetWord)); 14 15 } while (isMatch != null) ; ★isMatchがnullになったのに抜けないでループしてしまう。

試したこと

while (isMatch != "null")にしても抜けられません。
null判定はダブルクォーテで括る必要は無いはず...。
iwhile (matc = "")にすればなんでか1回目置換した後すぐにwhile文を抜けちゃうし
iwhile (matc === null)も同様でした。

じゃあdo-while文の中で

if (matc === null){ break; }

を入れても、if文の中に入りません。

お知恵を貸してください。

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

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

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

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

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

YAmaGNZ

2023/02/17 22:13

isMatchの中身を確認したのですか?
akiaki-t

2023/02/18 00:45 編集

console.logで「/null/」が出力されました。
itagagaki

2023/02/18 02:44

/null/ は正規表現オブジェクトでしょうね。null ではありません。 isMatch= の式では isMatch にはコンストラクター関数で新しく生成された正規表現オブジェクトが代入されています。何かがマッチしたかどうかをテストした結果ではありません。RegExp オブジェクトを学び直してください。
akiaki-t

2023/02/18 03:02 編集

itagakiさん 不勉強で申し訳ございません。と書けばご満足いただけるでしょうか? 調べても分からなかったから質問したんです。 とわざわざ書き添えないと、こちらが調べたことも察せないのでしょうか。 > isMatch= の式では そういう式は書いてません。判定式!=は書きましたが。 ろくな提示もしないくせに学び直せと上から目線で失礼なことを言う前に、質問内容をよく読んでください。 そして、ズバリの回答を、あるいはこちらがそれを辿って解に辿り着けるような回答をするつもりが無いなら、そもそもコメントしないでください。大変不愉快です。 これも教育と思ってやってるなら間違ってます。あなたがやっていることは教育でも指導でもない、「言ってやった」感を得て自分が満足するための行為です。テラテイルの趣旨を今一度確認した方がよろしいかと。
itagagaki

2023/02/18 03:04

> そういう式は書いてません。 いいえ、そういう式を書いています。 isMatch= new RegExp(body.match(targetWord)); はコンストラクター関数を呼び出して新しいRegExpオブジェクトを生成して、生成されたRegExpオブジェクトを isMatch に代入する式です。 ということから、事実としてあなたが RegExp オブジェクトを誤用していたから、誤用する前に正しく学びなおすことを推奨したのです。 逆切れするのはいかがなものでしょうか。
itagagaki

2023/02/18 03:11

もし「?? RegExp オブジェクト? それは何ぞや?」と「?」が出てきたなら、今度はそれを調べれば良いのではないですか?あなたのコードの意図を汲んで、その意図どおり動く修正コードを出してあげるのが回答者の役割ですか?
itagagaki

2023/02/18 03:15

私はあなたが RegExp オブジェクトを正しく理解することが解にたどり着けることだと信じていたんですよ。
akiaki-t

2023/02/18 05:41 編集

怒り収まらずの連投かと思いますが、コメント欄の荒れに繋がるので投稿するなら1つにまとめていただきたい。 怒っているのはこちらですが、逆切れとは。 言葉の意味を理解して使わないと、恥ずかしいですよ。 当方、辞書通りではございませんが、 自分が悪いのにそれを指摘されたことに腹を立て逆上することと認識してます。 私は逆切れではなく、あなたの失礼な物言いに怒っているのです。 言葉は正しく使いましょう。 >あなたのコードの意図を汲んで、その意図どおり動く修正コードを出してあげるのが回答者の役割で ズバリを突いた回答をいただけるなら大変ありがたいことですが、だからこそ「あるいは解に辿り着けるものを」と書いたのです。 itagakiさんは日本語に不自由なことが分かります。 >RegExp オブジェクトを正しく理解することが解にたどり着けることだと信じていたんですよ。 信じる、信じないはitagakiさんの勝手ですが であれば、もっと分かりやすく砕いた説明をしてください。 学び直せと仰るなら、参考サイトや参考コードの1つも挙げたらいかがです。 さらに言うなら RegExpオブジェクトを理解したとて matchの結果を判定するにはどう書いたら良いかまでは繋がりません。 ・isMatch = new...はこういう式です ・だからisMatchにはnullが入りません。 ・isMatchがnullかどうかを判定したいのなら、こう書くべきです。 これくらい書いていただけると良かったです。 だいたい、人と人とのやりとり、しかも知らない人同士なのだから、 「学び直してください」という上から目線ではなく 「学び直せば正しい判定式が書けるでしょう」 くらい、書けませんか? 親切な回答を書くつもりが無いのなら、コメントしないでいただきたい。 上から目線の回答をするつもりが無かったとしても 文字のやりとりなのだから、温度感は文字でしか表すことができない。 書いた側と読んだ側では受け取り方が違うのは当たり前。 だからこそ、親切な書き方をすべきなのです。 それを指摘されて、まさに逆切れしているのはitagakiさんです。 重ねて言いますが 読み手がどう感じるかを考慮せず、親切な書き方をするつもりが無いのなら、コメントしないでいただきたい。 ■参考: あなたは回答時の注意事項を読んでないみたいなので 書き添えます。 ======================= 質問の解決につながる回答をしましょう。 Q&Aの回答には、質問の解決につながる回答のみを投稿しましょう。追加の情報が必要な場合などについては質問にコメントをするようにしてください。 ・ 読む側のことを考えた、分かりやすい文章を心がけましょう。 ・ サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 ・ 正しい情報を添えましょう。 ・ ただ「違います」「その通りです」というだけではなく、理解に充分な理由を内容に添えましょう。 ・ 外部ソースを示す場合は参照先が変更削除される可能性があるためURLだけではなく、該当部分の抜粋をし記載しましょう。 ・ AIが生成した回答・コメントを投稿する場合は、1行目に「[アルゴリズム/サービス名]により生成された文章です」と明記する必要があります。 =======================
itagagaki

2023/02/18 06:06

話になりませんね。 そんなんじゃもう誰も助けてくれませんよ。
itagagaki

2023/02/18 06:07

> あなたは回答時の注意事項を読んでないみたいなので ここは回答欄ではありませんよ。 冷静になりなさい。
akiaki-t

2023/02/18 06:28 編集

あなたもたいがいしつこいな。 ぐうの音も出ないからと、揚げ足取りですか? 潔く謝るかフェードアウトするかすればいいものを、わざわざコメント返しとは。 もう相手はいたしませんので、コメント投稿など当方の質問へのアクションは しないでください、迷惑です。
itagagaki

2023/02/18 06:35

怒り散らかしているのはあなたに見えるし、 ぐうの音が出ていないのもあなたに見えるよ
akiaki-t

2023/02/18 08:10

はいはい、自分がそうやって言われたら悔しいですもんね。 悪質なので通報しました。
itagagaki

2023/02/18 08:13

私はとっくにあなたを通報済みですよ。 助言しただけでいきなり殴られたのでね。
akiaki-t

2023/02/18 08:17

あなたがいちいちコメントするから、それに付き合わされて迷惑です。 どうもこちらを攻撃したいようで、本当面倒くさいな。 ただ質問しただけなのにやたら失礼なことを連発されて大変不愉快です。
itagagaki

2023/02/18 08:18

最初に攻撃したのが自分だということをわかっていないようですね。
akiaki-t

2023/02/18 08:22

最初に「学び直せ」と攻撃してきたのはあなたです。 当方の回答をろくに読んでないのがよく分かります。 それへの指摘も、スルーするか次回に活かしますくらい言えばいいのに、わざわざ何時間も付きまとい行為をしているのはあなたです。 何度も申し上げますが、失礼な物言いをされ大変不愉快です。
itagagaki

2023/02/18 08:30

「学び直してください」がなぜ攻撃なのか理解できませんね。 誰でも最初から知っている人はいません。 RegExp オブジェクトだってどこかの誰かが考えて作ったものなので、ドキュメントを読むなりをしないで理解する人なんてエスパーじゃない限りいません。それを「学ぶ」と言いましたが「調べる」でもいいでしょう。それは誰だってやっていることなんですよ。あなたは理解しないまま使っているように見えたから学び直してくださいと言ったまでです。そう言われていきり立って怒り出されたので驚きましたよ。
akiaki-t

2023/02/18 08:37

ですから、何度も申し上げているように 「学び直してください」という言い方が良くないのです。 ~してください。は指示語です。 他人に対して指示語を使うことが失礼なのです。 あなたは現実世界でも初対面の人に指示語を使うのですか? ~していただけますかを使えと言うつもりは毛頭ありませんが 温かみのある言葉遣いができないなら、当方へのコメントは控えてください。 どうやら延々と言い返さないと気が済まないようなので、これで当方の返信は終わりにします。
itagagaki

2023/02/18 08:39

なんかあなたはそれ以上のことをたくさん付け加えて言ってきましたよ。忘れたのですか?
guest

回答2

0

自己解決しました。
ユーザー「itagaki」によっていちゃもん付けられたので、こちらに投稿します。

GAS

1 do { 2 3 var matc = new RegExp(body.match(targetWord)); 4 5 if(body.match(targetWord) === null) break; 6 7 body = body.replace(targetWord,replaceWord); 8 9 console.log("body = " + body); 10 11 } while...

投稿2023/02/18 08:13

akiaki-t

総合スコア20

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

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

YAmaGNZ

2023/02/18 09:55

回答も編集できますので同じものを再度回答しないでください。
akiaki-t

2023/02/18 11:05

今回はわざとです。
guest

0

自己解決

自己解決しました。

GAS

1 do { 2 var matc = new RegExp(body.match(targetWord)); 3 if(body.match(targetWord) === null) break; 4 body = body.replace(targetWord,replaceWord); 5 console.log("body = " + body); 6 } while...

投稿2023/02/18 02:58

akiaki-t

総合スコア20

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

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

akiaki-t

2023/02/18 08:09 編集

そもそも質問はdo-while文を抜けたいものなので 実際にコード実行し抜けること確認しました。 この内容でOKです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問