Skip to content

自定义模板引擎

js
function execute(keys, values, statement) {
  const caller = new Function(...keys, `return (${statement})`);
  return caller(...values);
}

function parse(source, data) {
  const keys = Object.keys(data);
  const values = [];
  for (let i = 0; i < keys.length; i++) {
    values.push(data[keys[i]]);
  }
  const regex = /{{([^}]*)}}/g;
  source = source.replace(regex, (m, n) => {
    let result = m;
    try {
      console.info(m, n);
      result = execute(keys, values, n);
    } catch (e) {}
    return result;
  });
  console.info('source', source);
}

const source1 = `<div>
    <p>{{hello + world}}</p>
    <div>{{title}}</div>
    <p>{{hello + world}}</p>
</div>`;

const data = {
  title: 'face',
  hello: 'hello',
  world: 'world',
};

parse(source1, data);