我如何在 Node JS 中搜索和替换字符串
How can i search and replace strings in Node JS
我正在尝试编写一些代码,允许我将文档作为字符串传递,该字符串可以是纯文本或 html,并且嵌入了一些我想用个人价值观替换的字段。像这样的东西
Hi {{ first_name | fallback: "there" }},
我会将字段名称作为具有相同名称的对象传递,以便于查找。所以我正在寻找编码想法如何搜索 {{ }} 部分,然后检查字段是否不是未知的、空的或“”,以及它是否在标签中应用后备值。
这有点像 mailmerge,但我不希望它成为一个 docx 文件并输出为 word 或 pdf。我只想要处理过的字符串,这样我就可以传回我的邮件代码并发送消息
看看 HandlebarsJs。这正是 Handlebars 所做的,https://handlebarsjs.com
您可以使用 if.
作为后备方案
{{#if first_name}}{{first_name}}{{else}}there{{/if}},
如果 first_name 为假,则默认为那里。
如果您认为 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>
将执行以下操作以实现输出的程序,
- 获取
{{}}
之间的字符串
- 通过
|
拆分刺
- 使用
trim()
删除不需要的 space
- 检查并找到
fallback
值
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));
我正在尝试编写一些代码,允许我将文档作为字符串传递,该字符串可以是纯文本或 html,并且嵌入了一些我想用个人价值观替换的字段。像这样的东西
Hi {{ first_name | fallback: "there" }},
我会将字段名称作为具有相同名称的对象传递,以便于查找。所以我正在寻找编码想法如何搜索 {{ }} 部分,然后检查字段是否不是未知的、空的或“”,以及它是否在标签中应用后备值。 这有点像 mailmerge,但我不希望它成为一个 docx 文件并输出为 word 或 pdf。我只想要处理过的字符串,这样我就可以传回我的邮件代码并发送消息
看看 HandlebarsJs。这正是 Handlebars 所做的,https://handlebarsjs.com
您可以使用 if.
作为后备方案{{#if first_name}}{{first_name}}{{else}}there{{/if}},
如果 first_name 为假,则默认为那里。
如果您认为 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>
将执行以下操作以实现输出的程序,
- 获取
{{}}
之间的字符串
- 通过
|
拆分刺
- 使用
trim()
删除不需要的 space
- 检查并找到
fallback
值 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));