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

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

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

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

正規表現

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

Q&A

解決済

4回答

1644閲覧

replaceにおけるキャプチャでの指定方法

aruto

総合スコア175

JavaScript

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

正規表現

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

0グッド

0クリップ

投稿2018/07/15 05:55

実現したいこと

javascript

1let str = 'hello earth, hello world' 2let str2 = str.replace(/(hello) world/, 'こんにちは') 3console.log(str2) 4//期待出力 hello earth, こんにちは world 5//実際の出力 hello earth, こんにちは

正規表現でマッチした中から一部をキャプチャで指定し変換したいです。
後読みや先読みを利用すれば実現できることは把握しております。

上記のような感じで実装できると、とてもわかり易いなと思うのですが
こういったことをシンプルに実装する方法はありますでしょうか。

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

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

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

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

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

jun68ykt

2018/07/15 06:07

要件の確認ですが、単に、str.replace(/hello world/, 'こんにちは world'); とすれば、 "hello earth, こんにちは world" が得られますが、これではダメなのでしょうか?
aruto

2018/07/15 06:09

すみません、これはただの例でもう少し複雑な正規表現を用いたいときに、そういった方法があるかを知りたいという質問です。
guest

回答4

0

後方参照を使うとこんな感じ

javascript

1'hello earth, hello world'.replace(/hello( world)/, 'こんにちは$1'); 2// hello earth, こんにちは world

投稿2018/07/15 11:29

efcode

総合スコア422

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

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

efcode

2018/07/15 13:02

あれ、よく見たら知ってるって書いてるか 正規表現の仕様を変えたいか別の置換システムを実装したいって事なのかな replace関数をオーバーライドすれば独自の引数解釈で置換が出来ると思うけど どのみち、「正規表現」はその仕様があるのでそれに従う必要があるし、仮に「非正規表現」を作ったとして、誰が使うって問題がある気がするけど
think49

2018/07/15 13:55

> あれ、よく見たら知ってるって書いてるか 先読みを使った回答がベストアンサーに選ばれました。 「後読みや先読みを利用すれば実現できることは把握しております」の下りは謎ですね。
KojiDoi

2018/07/15 14:07

本当に謎です。こういう本当の意図がなんだかわからない質問が一番困りますね。
guest

0

ベストアンサー

JavaScript

1let str = 'hello earth, hello world'.replace(/hello(?= world)/, 'こんにちは'); 2 3console.log(str); // "hello earth, こんにちは world"

Re: aruto さん

投稿2018/07/15 07:08

think49

総合スコア18164

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

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

0

こんな感じでいいのでは…。

let str2 = str.replace(/(hello)( world)/, 'こんにちは$2')

投稿2018/07/15 13:24

KojiDoi

総合スコア13671

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

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

0

質問が適切でないために、答えづらくなってしまいすみません。
自分で正規表現を利用した際に、キャプチャや$1などを多用し読み返しづらくなってしまったため、よりシンプルな方法があるのかを知りたいという意図でした。

投稿2018/07/15 13:57

aruto

総合スコア175

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

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

KojiDoi

2018/07/15 14:06

これ以上シンプルな方法はないと思いますがね。すくなくとも先読みとか後読みとか使うよりはマシなはずだが。
think49

2018/07/16 00:52

別のコメントでも書きましたが、「後読みや先読みを利用すれば実現できることは把握しております」が明らかに誤解の元なので、「何をどうしてそういう理解に至ったのか」を説明する為に「あなたの考え方」「コードの軌跡」を質問文中に書くようにして下さい。 結果的に先読みの回答がベストアンサーに選ばれた事から、「先読みを把握しているつもりで、把握していなかった」ということになっています。 質問者さんの理解度は内容からそれぞれの回答者が判断します。 質問者さん自身の自己評価はノイズにしかならないと思います。
think49

2018/07/16 01:02

> 自分で正規表現を利用した際に、キャプチャや$1などを多用し読み返しづらくなってしまったため、 「読み返しづらくなってしまったコード」が質問文に書かれていれば、良かったと思います。 今、書かれている str.replace(/(hello) world/, 'こんにちは') は用をなさないので、正規表現を理解しているようには読めません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問