const regex = /^(?<location>[A-Za-z]+)[-_][A-Z]{1,2}\d/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^(?<location>[A-Za-z]+)[-_][A-Z]{1,2}\\d', 'gm')
const str = `BMD-R1
BMD-R2
BTN-R1
BTN-R1-SW
BTN-R2
BTN-R2-SW
CentralOCS-R1
CentralOCS-R1-SW
CentralOCS-R2
CentralOCS-R2-SW
CentralOCS-SW3
CentralOCS-SW4
CLJ-R1
CLJ-R2
CS-HPOV-MLS1
CS-HPOV-MLS2
CTN-R1
CTN-R2
EKV-OTC-MLS1
GOS-R1
GOS-R2
GVL-R1
GVL-R2
ING-R1
LAW-R1
LCS-R1
LCS-R2
LIV-R1
Mascot_R1
Mascot_R2
Mascot_SW1
Mascot_SW2
Mascot_SW3
MST-R1
MST-R2
MTV-R1
MTV-R2
OSS-FW1 (FO)
OSS-FW1 (Pri)
PEN-R1
PEN-R2
Pitt_R1
ROC-FW1
ROC-HPDM-SW1
ROC-PUB-MLS1
ROC-PUB-MLS2
ROC-RCS-SW
SM-ER-SW1
SM-ER-SW2
SM-FW1 (FO)
SM-FW1 (Pri)
SM-PUB-R1
SM-PUB-R1-SW
SM-PUB-R2
SM-PUB-R2-SW
SM-RCS-R1
SM-RCS-R2
SM-RCS-SW1
SM-RCS-SW2
ST-ER-SW1
ST-ER-SW2
ST-FW1 (FO)
ST-FW1 (Pri)
STM-R1
STM-R2
ST-OSS-MAIN-R1
ST-OSS-MAIN-R2
ST-OSS-PUB-R1
ST-OSS-PUB-R1-SW
ST-OSS-PUB-R2
ST-OSS-PUB-R2-SW
ST-PUB-MLS1
ST-PUB-MLS2
ST-PUB-R1
ST-PUB-R2
ST-RCS-R1
ST-RCS-R2
ST-RCS-SW1
ST-RCS-SW2
TES-SW1
Waterfall_SW1
Waterfall_SW2
Waterfall-R1
Waterfall-R2
WolloFW_R1
WolloFW_R2
WolloFW_SW
WYG-R1
WYG-R2
Wynyard_R1
Wynyard_R2
`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions