javascript - 比较 2 个字符串模板
问题描述
假设我有 3 个字符串模板:
A = `
Table <name> {
<attribute-name> <data-type>
}
`
B = `
Table User {
name varchar
}
`
C = `
Table Price {
name
}
`
这里,A是模板。我希望B和C的格式与A相同。在示例中,C不匹配,因此会抛出错误。而B匹配。
我希望占位符<name>
或<data-type>
根据B映射到它们的值。在这里,<name>
应该是“用户”,<attribute-name>
应该是“名称”,<data-type>
应该是“varchar”。
我可以进行线性搜索并比较字符串,但是有什么优雅的方法吗?还是一个javascript库?
解决方案
可能有一种更清洁的方法,但我认为这里的正则表达式可以为您提供帮助。
这是一个简单的匹配您的三个占位符:/^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));
推荐阅读
- mongoose - 如何在一个条件下更新文档,只使用一个查询
- mysql - DynamoDB 中的最新分区键条目
- python - 仅从 http 请求中获得空白响应
- dynamics-crm - CRM 错误管理员无法找到解决方案
- codeigniter - Codeigniter 自动将字段添加到 order_by
- bash - Getopt 会生成双破折号 (--),即使命令行上没有,并且不会验证无关参数
- java - 覆盖静态方法和多态性
- google-apps-script - 如何从单元格电子表格中提取 url 到字符串并使用 DocumentApp.openByUrl
- multidimensional-array - Minizinc:用一维数组初始化二维数组的每一行
- php - 从多维数组中删除前 3 个级别