用户定义的模板字符串
User-defined template string
我正在寻找一种方法让用户可以选择定义模板文字。该模板将被发送到后端并与他提供的数据一起使用。
示例场景:
const dataSentToBackend = [
{
name: 'Adam',
country: 'Spain'
},{
name: 'Eve',
country: 'Germany'
}
]
用户想要生成两个类似这样的文件:{name} from {country}
(或其他任何让他按照自己喜欢的方式使用标签的文件)。因此,此示例中的文件将被命名为 Adam from Spain
和 Eve from Germany
.
诀窍是需要将模板保存为模板,以便在后端实际处理数据时使用它。所以它可以用在一个循环中,通过dataSentToBackend
数组一个一个地命名文件。
到目前为止我只找到了String.raw
函数(感谢this页面),但我没有发现它对我有多大帮助(或者我不明白)。
假设您的用户在输入字段中输入的是模板字符串。您可以简单地将转义字符串保存在数据库中,并在将其编译为模板字符串之前取消转义。
要实际使用它,您可以尝试这样的操作。
const templateString = "Hello ${this.name}!"; // replace it with unescaped template
const templateVars = {
name: "world"
}
const fillTemplate = function(templateString, templateVars){
return new Function("return `"+templateString +"`;").call(templateVars);
}
console.log(fillTemplate(templateString, templateVars));
但我肯定会说不要让用户定义模板并使用它,除非你有一个非常可靠的清理脚本。
这是一种方法。我使用正则表达式 [a-z]+
作为 属性 名称,如果您需要允许更多字符(大写、下划线、数字等),您可以扩展该名称
const dataSentToBackend = [
{
name: 'Adam',
country: 'Spain'
}, {
name: 'Eve',
country: 'Germany'
}
]
const templateSentToBackend = "{name} from {country}";
serverSideReplace = (template, datas) =>
datas.map(data => template.replace(/\{([a-z]+)\}/g, (_, key) => data[key]));
console.log(serverSideReplace(templateSentToBackend, dataSentToBackend));
我正在寻找一种方法让用户可以选择定义模板文字。该模板将被发送到后端并与他提供的数据一起使用。
示例场景:
const dataSentToBackend = [
{
name: 'Adam',
country: 'Spain'
},{
name: 'Eve',
country: 'Germany'
}
]
用户想要生成两个类似这样的文件:{name} from {country}
(或其他任何让他按照自己喜欢的方式使用标签的文件)。因此,此示例中的文件将被命名为 Adam from Spain
和 Eve from Germany
.
诀窍是需要将模板保存为模板,以便在后端实际处理数据时使用它。所以它可以用在一个循环中,通过dataSentToBackend
数组一个一个地命名文件。
到目前为止我只找到了String.raw
函数(感谢this页面),但我没有发现它对我有多大帮助(或者我不明白)。
假设您的用户在输入字段中输入的是模板字符串。您可以简单地将转义字符串保存在数据库中,并在将其编译为模板字符串之前取消转义。
要实际使用它,您可以尝试这样的操作。
const templateString = "Hello ${this.name}!"; // replace it with unescaped template
const templateVars = {
name: "world"
}
const fillTemplate = function(templateString, templateVars){
return new Function("return `"+templateString +"`;").call(templateVars);
}
console.log(fillTemplate(templateString, templateVars));
但我肯定会说不要让用户定义模板并使用它,除非你有一个非常可靠的清理脚本。
这是一种方法。我使用正则表达式 [a-z]+
作为 属性 名称,如果您需要允许更多字符(大写、下划线、数字等),您可以扩展该名称
const dataSentToBackend = [
{
name: 'Adam',
country: 'Spain'
}, {
name: 'Eve',
country: 'Germany'
}
]
const templateSentToBackend = "{name} from {country}";
serverSideReplace = (template, datas) =>
datas.map(data => template.replace(/\{([a-z]+)\}/g, (_, key) => data[key]));
console.log(serverSideReplace(templateSentToBackend, dataSentToBackend));