1. ホーム
  2. javascript

[解決済み] プレースホルダーと置換オブジェクトを使用してJavaScriptの文字列をフォーマットする?

2022-09-20 13:49:44

質問

以下のような文字列があります。 My Name is %NAME% and my age is %AGE%.

%XXX% はプレースホルダーである。そこにオブジェクトから値を代入する必要がある。

オブジェクトは次のようなものです。 {"%NAME%":"Mike","%AGE%":"26","%EVENT%":"20"}

このオブジェクトをパースして、文字列を対応する値に置き換える必要があります。だから、その最終的な出力は次のようになります。

私の名前はマイクで、年齢は26です。

全部、純粋なjavascriptかjqueryを使ってやらなければならない。

どのように解決するのですか?

元の質問の要件は、任意の置換キーの実行時処理であるように見えるので、明らかに文字列補間の恩恵を受けることができませんでした。

しかし

は、文字列補間をするだけであれば

const str = `My name is ${replacements.name} and my age is ${replacements.age}.`

文字列を区切るバックティックに注意してください。


特定のOPの要件に適した回答として、以下のようなものがあります。 String.prototype.replace() に置き換えることができます。

以下のコードは、すべてのマッチを処理し、置換のないものには触れません(置換値がすべて文字列である限り、そうでない場合は以下を参照してください)。

var replacements = {"%NAME%":"Mike","%AGE%":"26","%EVENT%":"20"},
    str = 'My Name is %NAME% and my age is %AGE%.';

str = str.replace(/%\w+%/g, function(all) {
   return replacements[all] || all;
});

jsFiddle .

置換文字列が文字列でない場合は、まずオブジェクトに存在することを確認してください。例のような形式、つまりパーセント記号でくくられた形式がある場合は in 演算子を使うことができます。

jsFiddle .

しかし、フォーマットが特別なものでなく、つまり任意の文字列であり、かつ、replacementsオブジェクトに null プロトタイプを持たない場合は Object.prototype.hasOwnProperty() ただし、置換された文字列がプロトタイプのプロパティ名と衝突しないことが保証されている場合は、この限りではありません。

jsFiddle .

そうでない場合、置換文字列が 'hasOwnProperty' であった場合、結果的にめちゃくちゃな文字列を得ることになります。

jsFiddle .


余談ですが、あなたは以下のように呼ばれるはずです。 replacements アン Object ではなく Array .