我在创建一个程序时遇到了极大的困难,该程序基于我设定的规则检查文档的出现次数。借助正则表达式,我检查某些字段,如果特定字段存在,则可以计算其出现次数或进行更深入的扫描。这有点令人困惑,而我不知道该如何确切地解释。
我正在检查文本文件,但为了减少复杂性,我将使用数组。
我有以下数组:
为了实现这一目标,我需要进行一些检查,因此我想出了以下的“MAP”:
我很难创建伪代码,我知道这是可以通过递归完成的,但我卡住了。最大的问题是因为嵌套,我可能会有几个层级的嵌套,不一定是两个。
在过去的几个小时里,我创建了以下代码:
输出应该是:
我正在检查文本文件,但为了减少复杂性,我将使用数组。
我有以下数组:
let strings = [
'COMPANY: NAME ID: 12',
'COMPANY: NAME ID: 12',
'COMPANY: NAME ID: 12',
'COMPANY: NAME2 ID: 10'
];
以下是期望的输出结果:
{
'NAME' : { '12': 3 },
'NAME2': { '10': 1 }
}
为了实现这一目标,我需要进行一些检查,因此我想出了以下的“MAP”:
let patterns = [
{
'pattern': 'COMPANY:\\s*?([\\w]+)\\s',
'modifier': ''
},
{
'pattern' : 'ID:\\s*?(\\d{2})\\s*',
'modifier' : ''
}
];
我很难创建伪代码,我知道这是可以通过递归完成的,但我卡住了。最大的问题是因为嵌套,我可能会有几个层级的嵌套,不一定是两个。
在过去的几个小时里,我创建了以下代码:
'use strict';
let patterns = [
{
'pattern': 'COMPANY:\\s*?([\\w]+)\\s',
'modifier': ''
},
{
'pattern' : 'ID:\\s*?(\\d{2})\\s*',
'modifier' : ''
}
];
let strings = [
'COMPANY: NAME ID: 12',
'COMPANY: NAME ID: 12',
'COMPANY: NAME ID: 12',
'COMPANY: NAME2 ID: 10'
];
var _data = {};
for (let string of strings) {
var root = _data;
for (let i = 0, length = patterns.length; i < length; i++) {
let item = patterns[i];
let regex = new RegExp(item.pattern, item.modifier);
let result = regex.exec(string);
if (i < patterns.length -1) {
root = root[result[1]] = {};
} else {
root = root[result[1]] = 1;
}
}
}
document.body.innerHTML = JSON.stringify({_data});
我正在尝试获取最后一部分,即统计出现的次数,这让我很头疼。也许递归或生成器可以解决这个问题。
更新 -
重要的是要理解,应该适用于3,4,5个对象。例如:
let patterns = [
{
'pattern': 'COMPANY:\\s*?([\\w]+)\\s',
'modifier': ''
},
{
'pattern' : 'ID:\\s*?(\\d{2})\\s*',
'modifier' : ''
},
{
'pattern' : 'SOMETHING:\\s*?(\\d+)\\s*',
'modifier' : ''
}
];
let strings = [
'COMPANY: NAME ID: 12 SOMETHING: 1010',
'COMPANY: NAME ID: 12 SOMETHING: 1010',
'COMPANY: NAME ID: 12 SOMETHING: 1010',
'COMPANY: NAME2 ID: 10 SOMETHING: 1010'
];
输出应该是:
{
'NAME': {
'12': {
'1010': 3
}
},
'NAME2': {
'10': {
'1010': 1
}
}
}