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

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

新規登録して質問してみよう
ただいま回答率
85.46%
JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

892閲覧

同じ変数をforの中で何度もreplaceしたい

siranui

総合スコア54

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2021/11/22 09:33

編集2021/11/22 10:02

#やりたいこと
endという変数の中に正規表現で指定したものがあれば、
textの変数をreplaceして未クリアクリアした時間に置き換えたいです。

また、これはできればで良いのですが、もっと処理速度の速いスマートな方法があれば教えて欲しいです。

endはユーザーがクリアしたエンディングという想定です。
それをtextにreplaceして、未クリアのものはそのまま、クリアしたものはその時間を入れようとしています。)

#作ったJS

js

1end = `[End01] 井戸の中の蛙 22021年11月01日 12時50分 3 4[End03] 暴虐の圧死 52021年11月02日 04時51分`//ユーザーがクリアしたエンディング 6 7text = 8`[End01] 井戸の中の蛙 9未クリア 10 11[End02] 村殺しの残虐者 12未クリア 13 14[End03] 暴虐の圧死 15未クリア` 16 17console.log("START") 18 for(let i = 1;i<4;i++){//End01など、数字毎に確認したいのでfor 19 reg = new RegExp("d0"+i+".+\n.+分")//(/d01.+\n.+分/)になる想定 20 Treg = new RegExp("d0"+i+".+\n未クリア")//(/d01.+\n未クリア/)になる想定 21 if(end.match(reg)){ 22 end = text.replace(Treg,end.match(reg)) 23 text = end 24 console.log(i+"番目--\n"+end.match(reg)) 25 }else{ 26 console.log(i+"番目--ありません") 27 } 28 } 29console.log(text)

#起きていること
エラーは吐いていません。しかし、endの中に
d03] 暴虐の圧死 2021年11月02日 04時51分
があるのに、未クリアとなっています。

(下記画像はconsole.log)
console.log

#まとめ
endの中で時間が表記してあるものがあれば、text未クリアをreplaceしたい
② End01が反応してEnd03が反応しない理由がわからない
③ あわよくば、for以外の関数を使って処理速度を速めたい。

③はスルーしてもらって構いません。さしあたっては②が知りたいです。どうぞよろしくお願いいたします。

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

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

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

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

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

siranui

2021/11/22 10:03

これはお恥ずかしい。replaceに修正いたしました。(コード自体は元々replaceとなっており、原因ではありませんでした。)
guest

回答1

0

ベストアンサー

ちょっと意味がわからないです。こういうことですか?

javascript

1let end = `[End01] 井戸の中の蛙 22021年11月01日 12時50分 3 4[End03] 暴虐の圧死 52021年11月02日 04時51分`; 6 7let text =`[End01] 井戸の中の蛙 8未クリア 9 10[End02] 村殺しの残虐者 11未クリア 12 13[End03] 暴虐の圧死 14未クリア`; 15 16const t={ 17 ...Object.fromEntries(text.split(/\n{2}/).map(x=>x.split(/\n/))), 18 ...Object.fromEntries(end.split(/\n{2}/).map(x=>x.split(/\n/))), 19 }; 20text=Object.entries(t).map(x=>x.join('\n')).join('\n\n'); 21 22console.log("START") 23console.log(text);

投稿2021/11/22 10:15

yambejp

総合スコア115010

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

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

yambejp

2021/11/22 10:18

文字列で処理する案件ではなさそうですけどね オブジェクトや配列の利用を検討ください
siranui

2021/11/22 10:18

まさにそういうことです!なるほど、mapを使えばよかったのですね。全くもって失念してました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問