function matches(GIS, SSL) {
let possible = SSL.slice();
function match(item) {
let match = item;
let matched = false;
const type1 = /^(\d{4})\s{4}/;
const type2 = /^\D{3}\s(\d{4})/;
const type3 = /^(\d{4})\D\s{3}/;
if (type1.test(item)) {
const block = item.match(type1)[1];
const regexp = new RegExp(`^${block}\\s{4}`);
let filtered = possible.filter(d => regexp.test(d));
if (filtered.length > 0) {
match = filtered[0];
_.remove(possible, d => d === match);
matched = true;
}
}
else if (type2.test(item)) {
const block = item.match(type2)[1];
const regexp = new RegExp(`^\\D{3}\\s${block}`);
let filtered = possible.filter(d => regexp.test(d));
if (filtered.length > 0) {
match = filtered[0];
_.remove(possible, d => d === match);
matched = true;
}
}
else if (type3.test(item)) {
const block = item.match(type3)[1];
const regexp = new RegExp(`^${block}\\s{3}`);
let filtered = possible.filter(d => regexp.test(d));
if (filtered.length > 0) {
match = filtered[0];
_.remove(possible, d => d === match);
matched = true;
}
}
return {match: match, matched: matched};
}
return GIS.map(d => {
let m = match(d);
return {original: d, match: m.match, matched: m.matched};
});
}