如何在Node JS中搜索和替换字符串

时间:2019-02-08 04:01:28

标签: javascript node.js mailmerge

我正在尝试编写一些代码,使我可以将doc作为字符串传递,该字符串可以是纯txt或html,并且嵌入了一些字段,我想用个人价值观代替。像这样的东西

Hi {{ first_name | fallback: "there" }},

我会将字段名称作为具有相同名称的对象传递,因此查找很容易。因此,我在寻找编码思想,即如何搜索{{}}部分,然后检查field是否不未知,null或“”以及是否在标签中应用后备值。 这有点像mailmerge,但是我不希望它成为docx文件并输出为word或pdf。我只想要经过处理的字符串,这样我就可以传递回我的电子邮件代码并发送消息

2 个答案:

答案 0 :(得分:1)

将执行以下操作以实现输出的程序,

  1. 获取{{}}之间的字符串
  2. |分隔字符串
  3. 使用trim()删除不需要的空间
  4. 检查并找到fallback
  5. Replace具有期望值的字符串

下面是示例程序,它将逐步执行上述操作。

var str = 'Hi {{ first_name | fallback: "there" }},'
var data = {
    first_name: "siva",
    last_name: "sankar",
    code: 29
}

function templateRender(str, data) {
    return str.replace(/{{([^}]+)}}/g, function (match, string) {
        var fallback = ''
        var stringArr = string.split("|");
        var value = stringArr[0].trim();

        if (stringArr[1]) { fallback = stringArr[1].match(/(?<=fallback\:\s?)(["'].*?["'])/)[0].replace(/["']/g, "").trim(); }
        return data[value] ? data[value] : fallback;
    });
}

console.log("New String :::: ", templateRender(str, data));

答案 1 :(得分:0)

看看车把。正是https://handlebarsjs.com

对于后备,您可以使用if。

{{#if first_name}}{{first_name}}{{else}}there{{/if}},

如果first_name为falsey,则默认为该位置。

如果您认为if有点冗长,可以编写默认值的辅助函数。

Handlebars.registerHelper('fallback', (val, def) => val || def);

并在模板中使用

Hi {{fallback first_name 'there'}},

const template = Handlebars.compile(`Hi {{#if first_name}}{{first_name}}{{ else }}there{{/if}},`);
console.log(template({ first_name: '' }));
console.log(template({ first_name: 'Billy' }));

Handlebars.registerHelper('fallback', (val, def) => val || def);

const templateWithFallback = Handlebars.compile(`Hi {{fallback first_name 'there'}},`);

console.log(templateWithFallback({ first_name: '' }));
console.log(templateWithFallback({ first_name: 'Billy' }));
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.1.0/handlebars.min.js"></script>