我很难创建一个程序来根据我设置的规则检查文档的出现次数。在正则表达式的帮助下,我检查了一些字段,如果存在特定字段,我可以计算它的出现次数,或者我创建一个更深的扫描。这有点令人困惑,我不确切地知道如何解释。
我正在检查文本文件,但为了降低复杂性,我将使用数组。
我有以下数组:
[
'COMPANY: MCDONALDS' , ID: '12.123.123.1234-12',
'COMPANY: MCDONALDS' , ID: '12.123.123.1234-12',
'COMPANY: BURGERKING' , ID: '12.123.123.1234-12',
]
这是欲望输出:
{
'MCDONALDS' : { '12.123.123.1234-12': 2 },
'BURGERKING': { '12.123.123.1234-12': 1 },
}
要做到这一点,我需要做一些检查,所以我想出了以下' MAP':
module.exports = [
{
'name' : '\\sCOMPANY:\\s*?([\\w\\s]+)\\s',
'modifier' : ''
}
{
'name' : '\\sID:\\s*?(\\d{2}\\.\\d{3}\\.\\d{3}\\/\\d{4}-\\d{2})\\s*?',
'modifier': '',
}
];
我很难创建最后一部分代码。最大的问题是因为嵌套,我没有找到计算文档数量的方法。
在过去的几个小时里,我创建了以下代码:
var strings = [
'COMPANY: MCDONALDS' , ID: '12.123.123.1234-12',
'COMPANY: MCDONALDS' , ID: '12.123.123.1234-12',
'COMPANY: BURGERKING' , ID: '12.123.123.1234-12'
];
var patterns = [
[
{
'pattern' : '\\sEMPRESA:\\s*?([\\w\\s]+)\\s',
'modifier' : ''
},
{
'pattern' : '\\sINSCRIÇÃO:\\s*(\\d{2}\\.\\d{3}\\.\\d{3}\\/\\d{4}-\\d{2})\\s*?',
'modifier' : ''
}
]
];
for (var i = 0, var len = string.length; i < len; i++) {
var string = string[i];
var _data = {}
var obj = _data;
for (index in pattern) {
var array = pattern[index];
for (index_2 in array) {
var object = array[index_2];
var last = +index_2 + 1;
var result = regex(object.pattern, object.modifier, string);
if (array[last]) {
obj = obj[result] = {};
} else {
obj[result] = 1;
}
}
}
}
这很简单。迭代模式并使用嵌套对象创建对象,几乎就像我想要的那样:
{
'MCDONALDS' : { '12.123.123.1234-12': 1 },
'BURGERKING': { '12.123.123.1234-12': 1 },
}
如果迭代是最后一次,我指定一个。
问题是:我有两个MCDONALDS,所以应该是2,而不是1.第二次迭代会覆盖第一次,我无法弄清楚如何解决它。有什么想法吗?
提前谢谢。
答案 0 :(得分:0)
我不确定这是否会有所帮助,但这确实会产生预期效果
var array = [
`'COMPANY: MCDONALDS' , ID: '12.123.123.1234-12'`,
`'COMPANY: MCDONALDS' , ID: '12.123.123.1234-12'`,
`'COMPANY: BURGERKING' , ID: '12.123.123.1234-12'`,
];
var matches ={}
var result = {};
array.forEach(function(x) {
var key = x.match(/COMPANY:\s[a-z]+/i)[0].match(/[a-z]+$/i);
var id = x.match(/ID.*/)[0].match(/\'[0-9\.-]+'$/);
matches[key] = (matches[key] || 0) + 1;
result[key] = {
[id] : matches[key]
}
});
console.log(result)