Skip to content

Instantly share code, notes, and snippets.

@joepie91
Created June 22, 2019 20:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joepie91/6adc1ee7faed4be9d1da0ca8fcc79d9f to your computer and use it in GitHub Desktop.
Save joepie91/6adc1ee7faed4be9d1da0ca8fcc79d9f to your computer and use it in GitHub Desktop.
[ { input: 'Brandevej 10',
addressItems:
[ { input: 'Brandevej 10',
street: 'Brandevej',
numberItems: [ { type: 'single', number: '10' } ] } ] },
{ input: 'Borgmester Jørgensens Vej 3-7',
addressItems:
[ { input: 'Borgmester Jørgensens Vej 3-7',
street: 'Borgmester Jørgensens Vej',
numberItems: [ { type: 'range', from: '3', to: '7' } ] } ] },
{ input: 'Blegkilde Alle 2-4',
addressItems:
[ { input: 'Blegkilde Alle 2-4',
street: 'Blegkilde Alle',
numberItems: [ { type: 'range', from: '2', to: '4' } ] } ] },
{ input: 'Boulevarden 27',
addressItems:
[ { input: 'Boulevarden 27',
street: 'Boulevarden',
numberItems: [ { type: 'single', number: '27' } ] } ] },
{ input: 'Herningvej 1-21',
addressItems:
[ { input: 'Herningvej 1-21',
street: 'Herningvej',
numberItems: [ { type: 'range', from: '1', to: '21' } ] } ] },
{ input: 'Christiansgade 23',
addressItems:
[ { input: 'Christiansgade 23',
street: 'Christiansgade',
numberItems: [ { type: 'single', number: '23' } ] } ] },
{ input: 'Danmarksgade 55',
addressItems:
[ { input: 'Danmarksgade 55',
street: 'Danmarksgade',
numberItems: [ { type: 'single', number: '55' } ] } ] },
{ input: 'Helgolandsgade 35',
addressItems:
[ { input: 'Helgolandsgade 35',
street: 'Helgolandsgade',
numberItems: [ { type: 'single', number: '35' } ] } ] },
{ input: 'Scoresbysundvej 3',
addressItems:
[ { input: 'Scoresbysundvej 3',
street: 'Scoresbysundvej',
numberItems: [ { type: 'single', number: '3' } ] } ] },
{ input: 'Stolpedalsvej 61A',
addressItems:
[ { input: 'Stolpedalsvej 61A',
street: 'Stolpedalsvej',
numberItems: [ { type: 'single', number: '61A' } ] } ] },
{ input: 'Sigrid Undsets Vej 78-276',
addressItems:
[ { input: 'Sigrid Undsets Vej 78-276',
street: 'Sigrid Undsets Vej',
numberItems: [ { type: 'range', from: '78', to: '276' } ] } ] },
{ input: 'Kollegievej 4-6',
addressItems:
[ { input: 'Kollegievej 4-6',
street: 'Kollegievej',
numberItems: [ { type: 'range', from: '4', to: '6' } ] } ] },
{ input: 'Boulevarden 31',
addressItems:
[ { input: 'Boulevarden 31',
street: 'Boulevarden',
numberItems: [ { type: 'single', number: '31' } ] } ] },
{ input: 'Blegkilde Allé 6-8',
addressItems:
[ { input: 'Blegkilde Allé 6-8',
street: 'Blegkilde Allé',
numberItems: [ { type: 'range', from: '6', to: '8' } ] } ] },
{ input: 'Gundorfslund 1-4',
addressItems:
[ { input: 'Gundorfslund 1-4',
street: 'Gundorfslund',
numberItems: [ { type: 'range', from: '1', to: '4' } ] } ] },
{ input: 'Jernbanegade 12A+B',
addressItems:
[ { input: 'Jernbanegade 12A+B',
street: 'Jernbanegade',
numberItems:
[ { type: 'single', number: '12A' },
{ type: 'single', number: '12B' } ] } ] },
{ input: 'Sonjavej 31A - F',
addressItems:
[ { input: 'Sonjavej 31A - F',
street: 'Sonjavej',
numberItems: [ { type: 'range', from: '31A', to: '31F' } ] } ] },
{ input: 'Dronningens Tværgade 13A',
addressItems:
[ { input: 'Dronningens Tværgade 13A',
street: 'Dronningens Tværgade',
numberItems: [ { type: 'single', number: '13A' } ] } ] },
{ input: 'Kancelligården 1-55',
addressItems:
[ { input: 'Kancelligården 1-55',
street: 'Kancelligården',
numberItems: [ { type: 'range', from: '1', to: '55' } ] } ] },
{ input: 'Tinghusgade 2 / Smedegade 1 + 5',
addressItems:
[ { input: 'Tinghusgade 2',
street: 'Tinghusgade',
numberItems: [ { type: 'single', number: '2' } ] },
{ input: 'Smedegade 1 + 5',
street: 'Smedegade',
numberItems:
[ { type: 'single', number: '1' },
{ type: 'single', number: '5' } ] } ] },
{ input: 'Eriksholmsparken 178',
addressItems:
[ { input: 'Eriksholmsparken 178',
street: 'Eriksholmsparken',
numberItems: [ { type: 'single', number: '178' } ] } ] },
{ input: 'Rosenfeldtparken',
addressItems:
[ { input: 'Rosenfeldtparken',
street: 'Rosenfeldtparken',
numberItems: [] } ] },
{ input: 'Stegenborgparken',
addressItems:
[ { input: 'Stegenborgparken',
street: 'Stegenborgparken',
numberItems: [] } ] },
{ input: 'Vendelparken',
addressItems:
[ { input: 'Vendelparken',
street: 'Vendelparken',
numberItems: [] } ] },
{ input: 'Lemvigvej 62-66',
addressItems:
[ { input: 'Lemvigvej 62-66',
street: 'Lemvigvej',
numberItems: [ { type: 'range', from: '62', to: '66' } ] } ] },
{ input: 'Bakkegårdsvej 28',
addressItems:
[ { input: 'Bakkegårdsvej 28',
street: 'Bakkegårdsvej',
numberItems: [ { type: 'single', number: '28' } ] } ] },
{ input: 'Bygaden 71-117',
addressItems:
[ { input: 'Bygaden 71-117',
street: 'Bygaden',
numberItems: [ { type: 'range', from: '71', to: '117' } ] } ] },
{ input: 'Niels Ebbesens Gade 16',
addressItems:
[ { input: 'Niels Ebbesens Gade 16',
street: 'Niels Ebbesens Gade',
numberItems: [ { type: 'single', number: '16' } ] } ] },
{ input: 'Follingsvej 2-153',
addressItems:
[ { input: 'Follingsvej 2-153',
street: 'Follingsvej',
numberItems: [ { type: 'range', from: '2', to: '153' } ] } ] },
{ input: 'Hammelmosevej 40-116',
addressItems:
[ { input: 'Hammelmosevej 40-116',
street: 'Hammelmosevej',
numberItems: [ { type: 'range', from: '40', to: '116' } ] } ] },
{ input: 'Dannebrogsgade 34',
addressItems:
[ { input: 'Dannebrogsgade 34',
street: 'Dannebrogsgade',
numberItems: [ { type: 'single', number: '34' } ] } ] },
{ input: 'Hadsundvej 363F - P',
addressItems:
[ { input: 'Hadsundvej 363F - P',
street: 'Hadsundvej',
numberItems: [ { type: 'range', from: '363F', to: '363P' } ] } ] },
{ input: 'Fegge-/Agger-/Sebbersundvej',
addressItems:
[ { input: 'Fegge-/Agger-/Sebbersundvej',
street: 'Fegge-/Agger-/Sebbersundvej',
numberItems: [] } ] },
{ input: 'Knuden 1-82 og 84-98',
addressItems:
[ { input: 'Knuden 1-82 og 84-98',
street: 'Knuden',
numberItems:
[ { type: 'range', from: '1', to: '82' },
{ type: 'range', from: '84', to: '98' } ] } ] },
{ input: 'Øster Uttrupvej 3',
addressItems:
[ { input: 'Øster Uttrupvej 3',
street: 'Øster Uttrupvej',
numberItems: [ { type: 'single', number: '3' } ] } ] },
{ input: 'Hellekisten 15-239',
addressItems:
[ { input: 'Hellekisten 15-239',
street: 'Hellekisten',
numberItems: [ { type: 'range', from: '15', to: '239' } ] } ] },
{ input: 'Danagaarden 2-139',
addressItems:
[ { input: 'Danagaarden 2-139',
street: 'Danagaarden',
numberItems: [ { type: 'range', from: '2', to: '139' } ] } ] },
{ input: 'Hvalpsundvej',
addressItems:
[ { input: 'Hvalpsundvej',
street: 'Hvalpsundvej',
numberItems: [] } ] },
{ input: 'Næssundvej',
addressItems:
[ { input: 'Næssundvej', street: 'Næssundvej', numberItems: [] } ] },
{ input: 'Vilsundvej 1-146',
addressItems:
[ { input: 'Vilsundvej 1-146',
street: 'Vilsundvej',
numberItems: [ { type: 'range', from: '1', to: '146' } ] } ] },
{ input: 'Oddesundvej 33-193',
addressItems:
[ { input: 'Oddesundvej 33-193',
street: 'Oddesundvej',
numberItems: [ { type: 'range', from: '33', to: '193' } ] } ] },
{ input: 'Peder Barkesgade 17 / Danmarksgade 35',
addressItems:
[ { input: 'Peder Barkesgade 17',
street: 'Peder Barkesgade',
numberItems: [ { type: 'single', number: '17' } ] },
{ input: 'Danmarksgade 35',
street: 'Danmarksgade',
numberItems: [ { type: 'single', number: '35' } ] } ] },
{ input: 'Valdemarsgade 2 / Svendsgade 13',
addressItems:
[ { input: 'Valdemarsgade 2',
street: 'Valdemarsgade',
numberItems: [ { type: 'single', number: '2' } ] },
{ input: 'Svendsgade 13',
street: 'Svendsgade',
numberItems: [ { type: 'single', number: '13' } ] } ] },
{ input: 'Damstræde 50-159',
addressItems:
[ { input: 'Damstræde 50-159',
street: 'Damstræde',
numberItems: [ { type: 'range', from: '50', to: '159' } ] } ] },
{ input: 'Pontoppidanstræde 70A - 99E',
addressItems:
[ { input: 'Pontoppidanstræde 70A - 99E',
street: 'Pontoppidanstræde',
numberItems: [ { type: 'range', from: '70A', to: '99E' } ] } ] },
{ input: 'Sigrid Undsets Vej 280A - 346B',
addressItems:
[ { input: 'Sigrid Undsets Vej 280A - 346B',
street: 'Sigrid Undsets Vej',
numberItems: [ { type: 'range', from: '280A', to: '346B' } ] } ] },
{ input: 'Runddyssen 1-285',
addressItems:
[ { input: 'Runddyssen 1-285',
street: 'Runddyssen',
numberItems: [ { type: 'range', from: '1', to: '285' } ] } ] },
{ input: 'Runddyssen 2-354',
addressItems:
[ { input: 'Runddyssen 2-354',
street: 'Runddyssen',
numberItems: [ { type: 'range', from: '2', to: '354' } ] } ] },
{ input: 'Løvstikkevej / Ananasvej',
addressItems:
[ { input: 'Løvstikkevej',
street: 'Løvstikkevej',
numberItems: [] },
{ input: 'Ananasvej', street: 'Ananasvej', numberItems: [] } ] },
{ input: 'Sonjavej 4-86',
addressItems:
[ { input: 'Sonjavej 4-86',
street: 'Sonjavej',
numberItems: [ { type: 'range', from: '4', to: '86' } ] } ] },
{ input: 'Kappavej / Deltavej',
addressItems:
[ { input: 'Kappavej', street: 'Kappavej', numberItems: [] },
{ input: 'Deltavej', street: 'Deltavej', numberItems: [] } ] },
{ input: 'Løkkegade 4',
addressItems:
[ { input: 'Løkkegade 4',
street: 'Løkkegade',
numberItems: [ { type: 'single', number: '4' } ] } ] },
{ input: 'Brohusgade / Vestre Havnepromenade',
addressItems:
[ { input: 'Brohusgade', street: 'Brohusgade', numberItems: [] },
{ input: 'Vestre Havnepromenade',
street: 'Vestre Havnepromenade',
numberItems: [] } ] },
{ input: 'Metisvej / Dionevej',
addressItems:
[ { input: 'Metisvej', street: 'Metisvej', numberItems: [] },
{ input: 'Dionevej', street: 'Dionevej', numberItems: [] } ] },
{ input: 'Korevej 18',
addressItems:
[ { input: 'Korevej 18',
street: 'Korevej',
numberItems: [ { type: 'single', number: '18' } ] } ] },
{ input: 'Hellasvej 14 - 48',
addressItems:
[ { input: 'Hellasvej 14 - 48',
street: 'Hellasvej',
numberItems: [ { type: 'range', from: '14', to: '48' } ] } ] },
{ input: 'Jens Bangs Gade 5 - 11',
addressItems:
[ { input: 'Jens Bangs Gade 5 - 11',
street: 'Jens Bangs Gade',
numberItems: [ { type: 'range', from: '5', to: '11' } ] } ] },
{ input: 'Dannerhøj 11-40',
addressItems:
[ { input: 'Dannerhøj 11-40',
street: 'Dannerhøj',
numberItems: [ { type: 'range', from: '11', to: '40' } ] } ] },
{ input: 'Thomas Boss Gade 21',
addressItems:
[ { input: 'Thomas Boss Gade 21',
street: 'Thomas Boss Gade',
numberItems: [ { type: 'single', number: '21' } ] } ] },
{ input: 'Vestergade 23, 25, 27',
addressItems:
[ { input: 'Vestergade 23, 25, 27',
street: 'Vestergade',
numberItems:
[ { type: 'single', number: '23' },
{ type: 'single', number: '25' },
{ type: 'single', number: '27' } ] } ] },
{ input: 'Brandevej 8 B-G',
addressItems:
[ { input: 'Brandevej 8 B-G',
street: 'Brandevej',
numberItems: [ { type: 'range', from: '8 B', to: '8 G' } ] } ] },
{ input: 'Lindholm Nærbanevej 3',
addressItems:
[ { input: 'Lindholm Nærbanevej 3',
street: 'Lindholm Nærbanevej',
numberItems: [ { type: 'single', number: '3' } ] } ] },
{ input: 'Sankt Jørgens Gade 12',
addressItems:
[ { input: 'Sankt Jørgens Gade 12',
street: 'Sankt Jørgens Gade',
numberItems: [ { type: 'single', number: '12' } ] } ] },
{ input: 'Vendelbogade 13',
addressItems:
[ { input: 'Vendelbogade 13',
street: 'Vendelbogade',
numberItems: [ { type: 'single', number: '13' } ] } ] },
{ input: 'Toldstrupsgade 18',
addressItems:
[ { input: 'Toldstrupsgade 18',
street: 'Toldstrupsgade',
numberItems: [ { type: 'single', number: '18' } ] } ] },
{ input: 'Absalonsgade 2',
addressItems:
[ { input: 'Absalonsgade 2',
street: 'Absalonsgade',
numberItems: [ { type: 'single', number: '2' } ] } ] },
{ input: 'Smedegårdsvej 28-124',
addressItems:
[ { input: 'Smedegårdsvej 28-124',
street: 'Smedegårdsvej',
numberItems: [ { type: 'range', from: '28', to: '124' } ] } ] },
{ input: 'Scoresbysundvej 6-10',
addressItems:
[ { input: 'Scoresbysundvej 6-10',
street: 'Scoresbysundvej',
numberItems: [ { type: 'range', from: '6', to: '10' } ] } ] },
{ input: 'Brandevej 2',
addressItems:
[ { input: 'Brandevej 2',
street: 'Brandevej',
numberItems: [ { type: 'single', number: '2' } ] } ] },
{ input: 'Lindholm Brygge 1',
addressItems:
[ { input: 'Lindholm Brygge 1',
street: 'Lindholm Brygge',
numberItems: [ { type: 'single', number: '1' } ] } ] },
{ input: 'Dannebrogsgade 45',
addressItems:
[ { input: 'Dannebrogsgade 45',
street: 'Dannebrogsgade',
numberItems: [ { type: 'single', number: '45' } ] } ] },
{ input: 'Myrdalstræde 8A - 26E',
addressItems:
[ { input: 'Myrdalstræde 8A - 26E',
street: 'Myrdalstræde',
numberItems: [ { type: 'range', from: '8A', to: '26E' } ] } ] },
{ input: 'Myrdalstræde 1A - 45E',
addressItems:
[ { input: 'Myrdalstræde 1A - 45E',
street: 'Myrdalstræde',
numberItems: [ { type: 'range', from: '1A', to: '45E' } ] } ] },
{ input: 'Bag Hækken 29 - 31',
addressItems:
[ { input: 'Bag Hækken 29 - 31',
street: 'Bag Hækken',
numberItems: [ { type: 'range', from: '29', to: '31' } ] } ] },
{ input: 'Mellemvang 2 - 4',
addressItems:
[ { input: 'Mellemvang 2 - 4',
street: 'Mellemvang',
numberItems: [ { type: 'range', from: '2', to: '4' } ] } ] },
{ input: 'Frejavej 6 - 56',
addressItems:
[ { input: 'Frejavej 6 - 56',
street: 'Frejavej',
numberItems: [ { type: 'range', from: '6', to: '56' } ] } ] },
{ input: 'Snebærvej 6-34 og 21-31',
addressItems:
[ { input: 'Snebærvej 6-34 og 21-31',
street: 'Snebærvej',
numberItems:
[ { type: 'range', from: '6', to: '34' },
{ type: 'range', from: '21', to: '31' } ] } ] },
{ input: 'Buchwaldshave 14 - 32',
addressItems:
[ { input: 'Buchwaldshave 14 - 32',
street: 'Buchwaldshave',
numberItems: [ { type: 'range', from: '14', to: '32' } ] } ] },
{ input: 'Junoparken 30 - 52',
addressItems:
[ { input: 'Junoparken 30 - 52',
street: 'Junoparken',
numberItems: [ { type: 'range', from: '30', to: '52' } ] } ] },
{ input: 'Spiesgade 10 - 60',
addressItems:
[ { input: 'Spiesgade 10 - 60',
street: 'Spiesgade',
numberItems: [ { type: 'range', from: '10', to: '60' } ] } ] },
{ input: 'Langagervej 4',
addressItems:
[ { input: 'Langagervej 4',
street: 'Langagervej',
numberItems: [ { type: 'single', number: '4' } ] } ] },
{ input: 'Hadsundvej 180-182',
addressItems:
[ { input: 'Hadsundvej 180-182',
street: 'Hadsundvej',
numberItems: [ { type: 'range', from: '180', to: '182' } ] } ] },
{ input: 'Odinsgade 17-29, 109',
addressItems:
[ { input: 'Odinsgade 17-29, 109',
street: 'Odinsgade',
numberItems:
[ { type: 'range', from: '17', to: '29' },
{ type: 'single', number: '109' } ] } ] },
{ input: 'Niels Bohrs Vej 36-40',
addressItems:
[ { input: 'Niels Bohrs Vej 36-40',
street: 'Niels Bohrs Vej',
numberItems: [ { type: 'range', from: '36', to: '40' } ] } ] },
{ input: 'Ribevej 3',
addressItems:
[ { input: 'Ribevej 3',
street: 'Ribevej',
numberItems: [ { type: 'single', number: '3' } ] } ] },
{ input: 'Rendsburggade 20+28',
addressItems:
[ { input: 'Rendsburggade 20+28',
street: 'Rendsburggade',
numberItems:
[ { type: 'single', number: '20' },
{ type: 'single', number: '28' } ] } ] },
{ input: 'Ditlev Bergs Vej 5-121',
addressItems:
[ { input: 'Ditlev Bergs Vej 5-121',
street: 'Ditlev Bergs Vej',
numberItems: [ { type: 'range', from: '5', to: '121' } ] } ] },
{ input: 'Søndergade 62',
addressItems:
[ { input: 'Søndergade 62',
street: 'Søndergade',
numberItems: [ { type: 'single', number: '62' } ] } ] },
{ input: 'Ryesgade 50E, 2. sal',
addressItems:
[ { input: 'Ryesgade 50E, 2. sal',
street: 'Ryesgade',
numberItems: [ { type: 'single', number: '50E, 2. sal' } ] } ] },
{ input: 'Ryesgade 33',
addressItems:
[ { input: 'Ryesgade 33',
street: 'Ryesgade',
numberItems: [ { type: 'single', number: '33' } ] } ] },
{ input: 'Rendsburggade 7-11',
addressItems:
[ { input: 'Rendsburggade 7-11',
street: 'Rendsburggade',
numberItems: [ { type: 'range', from: '7', to: '11' } ] } ] },
{ input: 'Østerbro 31 A',
addressItems:
[ { input: 'Østerbro 31 A',
street: 'Østerbro',
numberItems: [ { type: 'single', number: '31 A' } ] } ] },
{ input: 'Ny Kastetvej 24',
addressItems:
[ { input: 'Ny Kastetvej 24',
street: 'Ny Kastetvej',
numberItems: [ { type: 'single', number: '24' } ] } ] },
{ input: 'Stormgade 9',
addressItems:
[ { input: 'Stormgade 9',
street: 'Stormgade',
numberItems: [ { type: 'single', number: '9' } ] } ] },
{ input: 'Golfbakken 20-22',
addressItems:
[ { input: 'Golfbakken 20-22',
street: 'Golfbakken',
numberItems: [ { type: 'range', from: '20', to: '22' } ] } ] },
{ input: 'Korsgade 3 og Kattesundet 27',
addressItems:
[ { input: 'Korsgade 3',
street: 'Korsgade',
numberItems: [ { type: 'single', number: '3' } ] },
{ input: 'Kattesundet 27',
street: 'Kattesundet',
numberItems: [ { type: 'single', number: '27' } ] } ] },
{ input: 'Toldstrupsgade 14-16',
addressItems:
[ { input: 'Toldstrupsgade 14-16',
street: 'Toldstrupsgade',
numberItems: [ { type: 'range', from: '14', to: '16' } ] } ] },
{ input: 'Signalvej 4',
addressItems:
[ { input: 'Signalvej 4',
street: 'Signalvej',
numberItems: [ { type: 'single', number: '4' } ] } ] },
{ input: 'Beddingen 9',
addressItems:
[ { input: 'Beddingen 9',
street: 'Beddingen',
numberItems: [ { type: 'single', number: '9' } ] } ] },
{ input: 'Sankelmarksgade 3 / Danmarksgade 11',
addressItems:
[ { input: 'Sankelmarksgade 3',
street: 'Sankelmarksgade',
numberItems: [ { type: 'single', number: '3' } ] },
{ input: 'Danmarksgade 11',
street: 'Danmarksgade',
numberItems: [ { type: 'single', number: '11' } ] } ] },
... 27 more items ]
"use strict";
const fs = require("fs");
const execall = require("execall");
let data = fs.readFileSync("./data.csv", "utf8");
function splitAtPositions(text, separators) {
let index = 0;
let items = [];
separators.forEach((separator) => {
items.push(text.slice(index, separator.index));
index = separator.index + separator.separatorLength;
});
items.push(text.slice(index));
return items;
}
function processRelatedNumbers(numberItems) {
let newItems = [];
numberItems.forEach((item) => {
if (newItems.length === 0 || item.match(/^[0-9]+\s?[a-z]{0,2}(?:\s?-\s?[0-9]+\s?[a-z]{0,2})?$/i)) {
newItems.push(item);
} else {
let lastIndex = newItems.length - 1;
if (item.match(/^[a-z]{1,2}$/i)) {
/* eg. '12A+B', where we are currently handling the 'B' */
newItems.push(mergeExtensions(newItems[lastIndex], item));
} else {
/* eg. '50E, 2. sal', where '2. sal' is a refinement of '50E' */
newItems[lastIndex] += `, ${item}`;
}
}
});
return newItems;
}
function mergeExtensions(base, extension) {
let baseNumber = base.match(/^[0-9]+\s?/)[0];
return baseNumber + extension;
}
let addresses = data.split("\n").map((line) => {
if (line.includes(";")) {
return line.split(";")[0];
}
}).filter((item) => {
return (item != null);
}).map((item) => {
let separatorSlashes = execall(/[^-]\/\s?[a-z]{2}/gi, item).map((match) => {
return {
index: match.index + 1,
separatorLength: 1
};
});
let separatorAnds = execall(/\sog\s[a-z]{2}/gi, item).map((match) => {
return {
index: match.index + 1,
separatorLength: 2
};
});
let separators = separatorSlashes.concat(separatorAnds);
let addressItems = splitAtPositions(item, separators);
return {
input: item,
addressItems: addressItems.map((item) => {
let trimmedItem = item.trim();
/* First number preceded by a space */
let numbering = / [0-9]+/.exec(trimmedItem);
let street = (numbering != null)
? trimmedItem.slice(0, numbering.index).trim()
: trimmedItem;
let numberItems = (numbering != null)
? trimmedItem.slice(numbering.index).trim().split(/,|\/|\+|og/g).map((match) => match.trim())
: [];
return {
input: trimmedItem,
street: street,
numberItems: processRelatedNumbers(numberItems).map((item) => {
if (item.includes("-")) {
let [from, to] = item.split("-");
from = from.trim();
to = to.trim();
if (from[0].match(/[0-9]/) && to[0].match(/[a-z]/i)) {
/* Special case: number has extensions, and the `to` only specifies the extension, without repeating the number. */
to = mergeExtensions(from, to);
}
return {
type: "range",
from: from,
to: to
};
} else {
return {
type: "single",
number: item
}
}
})
};
})
};
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment