[解決済み】複数の文字列を別の複数の文字列に置き換える
2022-04-17 07:30:51
質問
文字列の中の複数の単語を他の複数の単語に置き換えようとしています。文字列は、"私は猫と犬とヤギを飼っています"です。
しかし、これでは "I have a dog, a goat, and a cat" とはならず、代わりに "I have a cat, a cat, and a cat" が出力されます。JavaScriptで複数の文字列を同時に複数の他の文字列に置換して、正しい結果を生成することは可能でしょうか?
var str = "I have a cat, a dog, and a goat.";
str = str.replace(/cat/gi, "dog");
str = str.replace(/dog/gi, "goat");
str = str.replace(/goat/gi, "cat");
//this produces "I have a cat, a cat, and a cat"
//but I wanted to produce the string "I have a dog, a goat, and a cat".
解決方法は?
の答えとして。
<ブロッククオート最新答案募集中
今の例のように、"words" を使っている場合、以下のように拡張することができます。
ベン・マコーミック
を使用して、非捕捉グループと単語境界を追加します。
\b
を左と右に置いて部分一致を防いでいます。
\b(?:cathy|cat|catch)\b
-
\b
部分一致を防ぐためのワードバウンダリ -
(?:
非捕捉グループ-
cathy|cat|catch
選択肢の1つに一致する
-
-
)
非捕獲グループを閉じる -
\b
部分一致を防ぐためのワードバウンダリ
元の質問に対する例
let str = "I have a cat, a dog, and a goat.";
const mapObj = {
cat: "dog",
dog: "goat",
goat: "cat"
};
str = str.replace(/\b(?:cat|dog|goat)\b/gi, matched => mapObj[matched]);
console.log(str);
うまくいっていないようなコメントでの例。
let str = "I have a cat, a catch, and a cathy.";
const mapObj = {
cathy: "cat",
cat: "catch",
catch: "cathy"
};
str = str.replace(/\b(?:cathy|cat|catch)\b/gi, matched => mapObj[matched]);
console.log(str);
関連
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] 正規表現で変数を使うには?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] event.preventDefault() vs. return false
-
[解決済み] JavaScriptで複数行の文字列を作成する
-
[解決済み] JavaScriptにおけるendsWith
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
-
[解決済み】Bashでファイル名と拡張子を抽出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】BootstrapのCollapseが折りたたまれない
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み] ローカルファイルを開くことができません - Chrome: ローカルリソースのロードが許可されていません
-
[解決済み】ES6マップオブジェクトをソートすることは可能ですか?
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]