1

HTML 出力のカスタム置換メソッドを作成したいと考えています。しかし、私はそれを理解することはできません。私はそれが何らかの形で行われるべきだString.matchと思います。replace

文字列には常に _err_ で始まる「エラー コード」がいくつかあり、値を持つ JS オブジェクトがあります。

私が達成したいこと:

  1. _err_ で始まるすべての文字列部分 (エラー コード) を見つける
  2. オブジェクトの正しいキーを取得 - _err_ のないエラー コード
  3. Lang オブジェクトから値を見つける
  4. エラー コードを正しい Lang 値に置き換えます。

一部のエラー コードは複数回表示される場合があります。

var content = "Looks like you have _err_no_email or _err_no_code provided";
var Lang = {
    'no_email' : "No email",
    'no_code' : "No code"
};

私はそれを別の方法で行うことができます。そのため、オブジェクトを循環させLang、文字列内のものを置き換えます。アンダースコアを使用すると、次のようになります。

function replaceMe() {
    _.each(Lang, function(value, key) {
        content = content.replace(new RegExp('_err_' + key,'g'), value);
    });
    console.log(content);
};

しかし、私の最初のアイデアでそれがより速くできるのであれば、その方法を知りたい.

4

4 に答える 4

1
var replace = function(str, object, regexp) { //if property not found string is not replaced
    return String(str).replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name) {
        return (object[name] != null) ? object[name] : match;
    });
}

これは、非常に効率的ないくつかのプロジェクトで使用したフォーマット関数です。デフォルトでは {prop:'val'} に一致{prop}しますが、たとえば、場合によっては正規表現を渡すことができる/_err_+\S/gため、文字列内の他のトークンと一致します。

したがって、次のことができます。

var content ="Looks like you have {no_email} or {no_code} provided";
var Lang = {
    'no_email' : "No email",
    'no_code' : "No code"
}

var formatted = replace(content, lang);

または、元の文字列が他の回答の正規表現を盗む場合:

var formatted = replace(content, lang, /_err_([^\s]+)/g)
于 2013-11-10T23:29:55.110 に答える