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

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

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

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

Q&A

解決済

1回答

201閲覧

GASでのmatchメソッド・replaceメソッドを使用して文字抽出について

TomJerry

総合スコア10

Google Apps Script

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

0グッド

0クリップ

投稿2022/10/05 09:25

前提

先程以下の質問で正規表現について質問させてもらい回答を頂きました。
https://teratail.com/questions/8j05sw72e7aq6k#reply-a9jrw37pon0lif

その後自分なりに何とか欲しい文字抽出が出来ました。

実現したいこと

変数 char の書き方は(りんご)赤い:までがひとくくりで、3つあります。
私が書くとくだもの一つに付き、2行必要で、計6行必要になりました。
ですがもっと上手に書く方法はあるのでしょうか?

function kudamono(){
let char = '(りんご)赤い:(みかん)黄色い:(ブドウ)青い:'
ringo = char.match(/((りんご).?:)/)[0].replace('(りんご)','');
ringo = ringo.replace(':','');
mikan = char.match(/((みかん).
?:)/)[0].replace('(みかん)','');
mikan = mikan.replace(':','');
budou = char.match(/((ブドウ).*?:)/)[0].replace('(ブドウ)','');
budou = budou.replace(':','');
console.log([ringo,mikan,budou]);
}

18:24:53 情報 [ '赤い', '黄色い', '青い' ]

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

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

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

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

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

guest

回答1

0

ベストアンサー

配列化して処理するのはどうでしょうか?
ただし、char変数の中身は必ず、「 "(文字)出力したい文字:" 」のフォーマットになっている必要があります。

gs

1 let char = '(りんご)赤い:(みかん)黄色い:(ブドウ)青い:' 2 let charArray = char.split(":").filter(v => v).map((e) => { 3 return e.replace(/\(.*\)/, '') 4 }) 5 console.log(charArray)

log

1情報 [ '赤い', '黄色い', '青い' ]

投稿2022/10/05 09:46

k.a_teratail

総合スコア845

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

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

TomJerry

2022/10/05 09:51

k.a_teratailさん ありがとうございます。 すごいですね。あっという間ですね。 明日教えてもらったコードを一つずつ解析して仕組みを理解するようにします。
k.a_teratail

2022/10/05 16:47

簡単にですが、補足です。 char.split(":") で「:」ごとに区切り配列化し下記の状態になります。 ['(りんご)赤い', '(みかん)黄色い', '(ブドウ)青い', ''] 上記の配列に対して、配列に元々備えてある filterメソッドを使用し、最後の空白のみの要素を排除しています。 なので、filterメソッド使用後は下記のようになります。 ['(りんご)赤い', '(みかん)黄色い', '(ブドウ)青い'] さらに上記の配列に対して、mapメソッド(これも配列に元々備えてあるものです)を使用し、整形した結果を配列として返すようにしています。 整形の際に「e.replace(/\(.*\)/, '')」を行っていますが これは "(" から ")" までの文字を空文字に置き換えることを行っています。 ( と )の前に \ が入っているのはエスケープを行わないと ( と ) を文字として認識しないからです。 今回の例ですと下記のようになります。 「(りんご)赤い」の 「(りんご)」を 空文字に、結果「赤い」のみになる 「(みかん)黄色い」の「(みかん)」を空文字に、結果「黄色い」のみになる 「(ブドウ)青い」の「(ブドウ)」を空文字に、結果「青い」のみになる
TomJerry

2022/10/06 04:23

分かりやすい解説ありがとうございます。 昨日filterメソッドておmapメソッドを一つずつググって何となく分かった気分でいました。 使いこなせるようにします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問