如何在替换器对象的字符串循环中替换?

时间:2016-12-14 13:20:24

标签: javascript regex

我有一个输入字符串和一个替换对象,现在必须找到由=分隔的文本(对象键)的出现,并希望用对象值替换。但无法找到解决方案。这是my snippet,代码如下。

var replacer = function(tpl, data) {
  console.log('input==>', tpl);
  for(var key in data) {
    var re = new RegExp(key + '=(.*)', 'g');
    tpl = tpl.replace(re, function(match, p1, offset, string) {
      console.log('Replace=>', arguments);
      return p1; 
    });
    console.log('output==>', tpl);
  }
  console.log('final output==>', tpl);
};

var text = 'alpha=1\nbeta=2\nage=12\ncolor=green';

var result = replacer(text, { age: 15, color: 'red' });

输入字符串:'alpha=1\nbeta=2\nage=12\ncolor=green'

替换者对象:{ age: 15, color: 'red' }

所需的输出是:'alpha=1\nbeta=2\nage=15\ncolor=red'

试验1

使用return p1;,然后最终输出为==> 'alpha=1\nbeta=2\n12\ngreen'

试验2

使用return data[key];比最终输出==> 'alpha=\nbeta=2\n15\nred'

那么实现欲望输出的正确步骤是什么?

3 个答案:

答案 0 :(得分:2)

替换函数必须返回一些内容来替换整个匹配

return key+'='+data[key];

您还需要从函数中返回tpl

答案 1 :(得分:2)

以下是代码的变体,它还处理data[key]未定义的情况。请注意,您不需要在模式中使用任何捕获组,因此您可以缩短发送到匿名回调方法的参数列表:



var replacer = function(tpl, data) {
  for(var key in data) {
    var re = new RegExp(key + '=.*', 'g');
    tpl = tpl.replace(re, data[key] ? key + '=' + data[key] : '$&');
  }
  return tpl;
};

var text = 'alpha=1\nbeta=2\nage=12\ncolor=green';
var result = replacer(text, { age: 15, color: 'red' });
console.log(result);




另一点:如果您不想匹配age中的mage键,则需要使用

var re = new RegExp('\\b' + key + '=.*', 'g');
                     ^^^^  

答案 2 :(得分:1)

您也可以尝试

var replacer = function(tpl, data) {
  console.log('input==>', tpl);
  for(var key in data) {
    var re = new RegExp(key + '=(.*)', 'g');
    tpl = tpl.replace(re, key+'='+data[key]);
  }
   console.log('final output==>', tpl);
};

var text = 'alpha=1\nbeta=2\nage=12\ncolor=green';

var result = replacer(text, { age: 15, color: 'red' });