You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何替换字符串中的模板变量?Handlebars与项目不兼容

解决方案

方法一:自定义正则解析(无依赖)

无需额外引入库,自己实现简单的模板变量解析逻辑,适合基础的变量替换场景:

const message = "component=\"${component.name}\" and id=${id}";
const data = {"id": 101, "component": { "name": "Shiv" }};

function parseTemplate(templateStr, data) {
  // 匹配${xxx}格式的变量片段
  return templateStr.replace(/\${([^}]+)}/g, (match, path) => {
    // 将变量路径拆分为层级数组,比如"component.name"拆成["component", "name"]
    const keys = path.trim().split('.');
    // 从data对象中逐层读取对应值,找不到则保留原匹配内容
    return keys.reduce((current, key) => current?.[key], data) || match;
  });
}

// 若需要将id替换为100,直接修改数据后传入即可
const modifiedData = {...data, id: 100};
const result = parseTemplate(message, modifiedData);
console.log(result); // 输出:component="Shiv" and id=100

方法二:使用Function动态求值(需确保数据可信)

如果模板逻辑更复杂,且能保证传入的data是完全安全可控的(无恶意内容),可以用这种方式实现:

const message = "component=\"${component.name}\" and id=${id}";
const data = {"id": 101, "component": { "name": "Shiv" }};
const modifiedData = {...data, id: 100};

function parseTemplate(templateStr, data) {
  // 将data的键值对转换为函数参数声明
  const paramStr = Object.keys(data).map(key => `${key}`).join(', ');
  // 构造函数并执行,利用ES6模板字符串完成替换
  return new Function(paramStr, `return \`${templateStr}\`;`)(...Object.values(data));
}

const result = parseTemplate(message, modifiedData);
console.log(result); // 输出:component="Shiv" and id=100

注意:此方法存在代码注入风险,仅适用于数据完全可信的场景。

方法三:React原生JSX语法(组件内直接使用)

如果是在React组件中使用,直接利用JSX的模板语法即可,完全不存在兼容性问题:

const data = {"id": 101, "component": { "name": "Shiv" }};
const targetId = 100;

function MyComponent() {
  return (
    <span>
      component="{data.component.name}" and id={targetId}
    </span>
  );
}

内容的提问来源于stack exchange,提问作者Shiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:17:43