gridref1

by Chris Dennis

JavaScript

const RE100km = /^(?<prefix>[HNSOT][A-HJ-Z])$/;
const RE10km  = /^(?<prefix>[HNSOT][A-HJ-Z])(?<digits>\d\d)$/;
const RE5km   = /^(?<prefix>[HNSOT][A-HJ-Z])(?<digits>\d\d)(?<suffix5k>(NW|NE|SE|SW))$/;
const RE2km   = /^(?<prefix>[HNSOT][A-HJ-Z])(?<digits>\d\d)(?<suffix2k>[A-NP-Z])$/;      
const RE1km   = /^(?<prefix>[HNSOT][A-HJ-Z])(?<digits>\d{4})$/;
const RE100m  = /^(?<prefix>[HNSOT][A-HJ-Z])(?<digits>\d{6})$/;
const RE10m   = /^(?<prefix>[HNSOT][A-HJ-Z])(?<digits>\d{8})$/;
const RE1m    = /^(?<prefix>[HNSOT][A-HJ-Z])(?<digits>\d{10})$/;
const REgx    = /^(?<prefix>[HNSOT][A-HJ-Z])(?<digits>(\d\d)+)(?<suffix>([A-NP-Z]|NW|NE|SE|SW)?)$/;      
const REgr    = /^(?<prefix>[HNOST][A-HJ-Z])(?<first2>\d\d)(?<suffix>[A-NP-Z]|NW|NE|SE|SW)?(?<digits>(\d\d){0,4})$/;      

for (let gr of ["SU48", "SU48B", "SU48NW", "SU4830", "xyzzy", "SU4830A", "PQ1234", "", 42, "SU123", "SU0123456789", "SU0123456789012"]) {
let result = REgr.exec(gr);
if (result === null) {
	console.log(gr, "failed");
} else {
	console.log(gr, result);
  console.log(result.groups.prefix, result.groups.first2, result.groups.suffix, result.groups.digits);
}
}