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

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

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

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

Q&A

解決済

3回答

681閲覧

多数の正規表現リテラルで文字列を置き換えたい

YamakawaJunichi

総合スコア630

JavaScript

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

0グッド

0クリップ

投稿2018/11/14 11:04

多数の正規表現とそれに対応する文字列があり、ある文字列をそれらで置き換えたいです。
正規表現と置き換える文字列を連想配列にしてループさせようと思いましたが、正規表現リテラルをkeyにできません。
どうしたら良いでしょうか。

JavaScript

1var pairs = { 2 /hoge/: "ほげ", // できない 3 /hogehoge/: "ほげ", 4 /huga/: "ふが", 5 /piyo/: "ぴよ", 6}; 7 8for(key in pairs){ 9 text = text.replace(key, pairs[key]); 10}

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

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

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

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

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

guest

回答3

0

hogehogeよりさきにhogeがあると思ったようにはならないかもしれませんね

javascript

1var pairs = [ 2 {reg:/hoge/, replacement:"ほげ"}, 3 {reg:/hogehoge/, replacement:"ほげぇ"}, 4 {reg:/huga/, replacement:"ふが"}, 5 {reg:/piyo/, replacement:"ぴよ"}, 6 ]; 7var text="111hogehogehogehoge222hugahogepiyo333"; 8for(i of pairs){ 9 text = text.replace(i.reg, i.replacement); 10} 11console.log(text);

投稿2018/11/14 11:12

yambejp

総合スコア114839

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

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

YamakawaJunichi

2018/11/14 11:37

ベストアンサーと同様の回答でしたので早かった方をベストアンサーにさせていただきましたが、回答くださいましてありがとうございました。 > hogehogeよりさきにhogeがあると思ったようにはならないかもしれませんね その通りですね。 valueに重複があることを表現したかったのでこのようなサンプル値になりましたが、実際の値にはそのようなバグはありませんでした。
guest

0

ベストアンサー

こういうことではない?

HTML

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="utf-8"> 5<script> 6var pairs = [ 7 { reg: new RegExp('hoge'), word: 'ほげ' }, 8 { reg: new RegExp('hogehoge'), word: 'ほげ' }, 9 { reg: new RegExp('huga'), word: 'ふが' }, 10 { reg: new RegExp('piyo'), word: 'ぴよ' }, 11]; 12var text = 'ほげhoge'; 13pairs.forEach(function(v) { 14 text = text.replace(v.reg, v.word); 15}); 16console.log(text); 17</script> 18</head> 19<body> 20</body> 21</html>

投稿2018/11/14 11:11

rururu3

総合スコア5545

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

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

YamakawaJunichi

2018/11/14 11:33

オブジェクトの配列にしてしまえばよかったんですね。 早かったのでベストアンサーにさせていただきます、ありがとうございました。
guest

0

連続置換

置換後の文字列を置換すると、連鎖的に置換されて管理が複雑化するので、お勧めしません。
(ありがちなのは、HTMLタグに置換して、置換後の属性値やタグ名を置換してしまうとか)

JavaScript

1const map = new Map([[/foo/g, 'bar'], [/bar/g, 'baz'], [/baz/g, 'qux']]); 2let string = 'foo bar baz'; 3 4for (let [key, value] of map) { 5 string = string.replace(key, value); 6} 7 8console.log(string); // "qux qux qux"

一括置換

一度に置換すれば、「置換後の文字列」が置換される懸念がありません。

JavaScript

1const map2 = new Map([['foo', 'bar'], ['bar', 'baz'], ['baz', 'qux']]); 2let string2 = 'foo bar baz'; 3 4string2 = string2.replace(/foo|bar|baz/g, match => map2.get(match)); 5 6console.log(string2); // "bar baz qux"

Re: YamakawaJunichi さん

投稿2018/11/14 12:05

think49

総合スコア18164

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問