将字符串文字作为带有全局标志的Javascript .replace()模式传递

时间:2012-10-09 15:10:51

标签: javascript regex loops syntax replace

我有以下内容迭代“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++;
}

1 个答案:

答案 0 :(得分: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;
}