根据规定的规则获取文档的出现次数

时间:2016-05-19 00:52:40

标签: javascript

我很难创建一个程序来根据我设置的规则检查文档的出现次数。在正则表达式的帮助下,我检查了一些字段,如果存在特定字段,我可以计算它的出现次数,或者我创建一个更深的扫描。这有点令人困惑,我不确切地知道如何解释。

我正在检查文本文件,但为了降低复杂性,我将使用数组。

我有以下数组:

[
  '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.第二次迭代会覆盖第一次,我无法弄清楚如何解决它。有什么想法吗?

提前谢谢。

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)