1

http://jsfiddle.net/XwHA6/

特定の文字列に文字列 {{value}} が 2 回あります。その値を replace() しようとすると、その値の最初のインスタンスのみが置き換えられ、2 番目のインスタンスは置き換えられません。上記の JSFiddle リンクはこれを示しています。これは「設計どおりの動作」ですか、それとも何か間違っていますか? より良いオプションはありますか?

  var str = 'Spend $ {{value}} Get $ {{value}} Off';
  var result = str.replace('{{value}}', '<a href="#" id="value" data-type="text" data-pk="1" data-name="Value" data-original-title="Amount" class="editable editable-click">value</a>');
4

1 に答える 1

3

これは、文字列引数を使用した場合のデフォルトの動作です.replace()(何らかの理由で)。グローバル フラグを指定して正規表現を指定すると、次のように機能します。

str.replace(/{{value}}/g, ...);

また、とにかく書いていたので、Python の単純な JavaScript クローンを次に示しますstr.format

String.prototype.format = function() {
    if (!arguments.length) {
        return this;
    }

    var mapping;

    if (typeof arguments[0] === 'object') {
        mapping = arguments[0];
    } else {
        mapping = arguments;
    }

    return this.replace(/\{(.*?)\}/g, function(match, name) {
        return mapping[name];
    });
};

次のように使用できます。

str.format({value: '<a href=...'});

または次のように:

'{0}{1}{0}'.format(1, 2); // "121"
于 2013-06-12T21:10:20.710 に答える