2

我有以下迭代“templateOverrides”数组的内容。 DPGlobal.template是我需要覆盖的原始模板。我的问题是我需要将g标志传递给该.replace()方法就var newTemplate = ...行了。只要我能够一次动态地迭代和覆盖模板片段,它就可以工作,但g标志没有通过。我主要是好奇实现它的最干燥的方法是什么......

for ( var i in templateOverrides ) {
    var thisOverride = templateOverrides[i];
    var origGlobalTemplate = DPGlobal[thisOverride];
    var newTemplate = DPGlobal.template.replace(origGlobalTemplate, options[thisOverride]);
    DPGlobal.template = newTemplate;
    i++;
}
4

1 回答 1

1

如果通过 声明它new RegExp(),则可以将/g修饰符作为构造函数的第二个参数包含在内

var newTemplate = DPGlobal.template.replace(new RegExp(origGlobalTemplate,'g'), options[thisOverride]);

顺便说一句,templateOverrides 真的是一个Array [],还是一个对象{}?如果是Array,则应该使用增量 for 循环而不是for-in构造,其目的是迭代对象属性。

for ( var i=0; i<templateOverrides.length; i++ ) {
  var thisOverride = templateOverrides[i];
  var origGlobalTemplate = DPGlobal[thisOverride];
  var newTemplate = DPGlobal.template.replace(new RegExp(origGlobalTemplate,'g'), options[thisOverride]);
  DPGlobal.template = newTemplate;
}
于 2012-10-09T15:17:16.433 回答