Nodejs 正则获取银行账单

Nodejs正则获取银行账单的消费记录,其实就这么简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
'use strict';
var _ = require('lodash');
var moment = require('moment');
module.exports.execute = function (str) {
/**
* 清理数组
* @param {[type]} arr [description]
* @param {[type]} value [description]
* @return {[type]} [description]
*/
var clean = function(arr,value) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] == value) {
arr.splice(i, 1);//返回指定的元素
i--;
}
}
return arr;
};

var result = {};
var parts = str.match(/<tbody>(.+?)<\/tbody>/g);

parts = parts.map(function (p) {
var t = p.replace(/ /g,'')//去掉全部中文字符间的空格
.replace(/<[^>]*>/g, ' ')//去掉全部html标签
.replace(/&nbsp;/g,' ')//将&nbsp;替换为一个空格
.replace(/ +/g, ' ');//将多个空格替换为一个空格
return t.split(' ').length > 13 ? t : '';
});


parts = clean(parts,'');
var parts1 = parts[3].split(' ');
parts1 = parts1.slice(13,parts.length - 1);
var records1 = _.chunk(parts1,7);

var parts2 = parts[4].split(' ');
parts2 = parts2.slice(13,parts2.length - 1);
var records2 = _.chunk(parts2,7);

result.records = [];
_.forEach([records1,records2], function (t) {
_.forEach(t,function(r){
var record = new Record();

record.rtime = moment([r[1], '00:00:00'].join(' '), 'YYYY/MM/DD HH:mm:ss').unix();
record.money = r[4];
record.content = r[2].replace(/&nbsp;/g,'');
result.records.push(record);
})
});

return result;
};

推荐使用mocha进行测试一下。