首页 > 解决方案 > 比较 2 个字符串模板

问题描述

假设我有 3 个字符串模板:

A = `
Table <name> {
<attribute-name> <data-type>
}
`
B = `
Table User {
name varchar
}
`
C = `
Table Price {
name
}
`

这里,A是模板。我希望BC的格式与A相同。在示例中,C不匹配,因此会抛出错误。而B匹配。

我希望占位符<name><data-type>根据B映射到它们的值。在这里,<name>应该是“用户”,<attribute-name>应该是“名称”,<data-type>应该是“varchar”。

我可以进行线性搜索并比较字符串,但是有什么优雅的方法吗?还是一个javascript库?

标签: javascriptstring

解决方案


可能有一种更清洁的方法,但我认为这里的正则表达式可以为您提供帮助。

这是一个简单的匹配您的三个占位符:/^Table (\w*) {\n(\w*) (\w*)\n}/gm

B = `
Table User {
name varchar
}
`
C = `
Table Price {
name
}
`

function parseTemplate(str) {
  var regex = /^Table (\w*) {\n(\w*) (\w*)\n}/gm
  var matches = regex.exec(str);
  if (matches && matches.length == 4) {
    return {
      name: matches[1],
      'attribute-name': matches[2],
      'data-type': matches[3]
    };
  } else return null;
}

console.log(parseTemplate(B));
console.log(parseTemplate(C));


推荐阅读