我有一个输入字符串和一个替换对象,现在必须找到由=
分隔的文本(对象键)的出现,并希望用对象值替换。但无法找到解决方案。这是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'
使用return p1;
,然后最终输出为==> 'alpha=1\nbeta=2\n12\ngreen'
使用return data[key];
比最终输出==> 'alpha=\nbeta=2\n15\nred'
那么实现欲望输出的正确步骤是什么?
答案 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' });