docs/zh_hans/reference/compat/string/template.md
::: warning 使用 JavaScript 模板字面量
由于复杂的字符串处理,这个 template 函数运行较慢。
请使用更快、更现代的 JavaScript 模板字面量。
:::
创建一个函数,将值插入字符串模板以生成新字符串。
const compiled = template(templateString);
template(string, options?)当您想要将数据插入字符串模板以创建完整字符串时,请使用 template。您可以安全地转义值、按原样插入值或执行 JavaScript 代码。
基本用法允许您插入或转义值。
import { template } from 'es-toolkit/compat';
// 按原样插入值
const compiled = template('<%= value %>');
compiled({ value: 'Hello, World!' });
// 返回: 'Hello, World!'
// 安全转义 HTML
const safeCompiled = template('<%- value %>');
safeCompiled({ value: '<script>alert("xss")</script>' });
// 返回: '<script>alert("xss")</script>'
您也可以执行 JavaScript 代码。
import { template } from 'es-toolkit/compat';
// 使用条件语句
const compiled = template('<% if (user) { %>你好 <%= user %>!<% } %>');
compiled({ user: 'es-toolkit' });
// 返回: '你好 es-toolkit!'
// 使用循环
const listTemplate = template('<% users.forEach(function(user) { %><li><%= user %></li><% }); %>');
listTemplate({ users: ['小明', '小红', '小刚'] });
// 返回: '<li>小明</li><li>小红</li><li>小刚</li>'
您可以指定变量名以更安全地使用。
import { template } from 'es-toolkit/compat';
const compiled = template('<%= data.name %> 今年 <%= data.age %> 岁', {
variable: 'data',
});
compiled({ name: '小明', age: 25 });
// 返回: '小明 今年 25 岁'
您可以导入和使用外部函数。
import { template } from 'es-toolkit/compat';
const compiled = template('<%= _.toUpper(message) %>', {
imports: { _: { toUpper: str => str.toUpperCase() } },
});
compiled({ message: 'hello world' });
// 返回: 'HELLO WORLD'
您也可以创建自定义分隔符。
import { template } from 'es-toolkit/compat';
// 使用自定义分隔符插入值
const compiled = template('{{ message }}', {
interpolate: /\{\{([\s\S]+?)\}\}/g,
});
compiled({ message: '你好!' });
// 返回: '你好!'
// 使用自定义分隔符转义
const safeCompiled = template('[- html -]', {
escape: /\[-([\s\S]+?)-\]/g,
});
safeCompiled({ html: '<div>内容</div>' });
// 返回: '<div>内容</div>'
string (string): 模板字符串。options (object, 可选): 配置对象。
options.escape (RegExp, 可选): 用于 HTML 转义的正则表达式分隔符。默认为 <%-([\s\S]+?)%>。options.evaluate (RegExp, 可选): 用于执行 JavaScript 代码的正则表达式分隔符。默认为 <%([\s\S]+?)%>。options.interpolate (RegExp, 可选): 用于值插入的正则表达式分隔符。默认为 <%=([\s\S]+?)%>。options.variable (string, 可选): 数据对象的变量名。options.imports (object, 可选): 模板中使用的函数。options.sourceURL (string, 可选): 用于调试的源 URL。(TemplateExecutor): 一个接收数据对象并返回完整字符串的函数。生成的函数代码也可以通过 source 属性访问。