const regex = /(MacBook[1-7],\d|MacBookAir[1-4],\d|MacBookPro[1-8],\d|Macmini[1-5],\d|iMac(1[0-2]|[4-9]|),\d|^MacPro[1-5],\d$)/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(MacBook[1-7],\\d|MacBookAir[1-4],\\d|MacBookPro[1-8],\\d|Macmini[1-5],\\d|iMac(1[0-2]|[4-9]|),\\d|^MacPro[1-5],\\d$)', 'gm')
const str = `Model information: https://support.apple.com/en-us/HT210222
Published Date: February 01, 2021
Validation: https://regex101.com/r/p5r9WT/3/
This regex is exact. No new models are supported.
(MacBookAir[5-9]|MacBookPro(9|1[0-6])|MacPro[6-7]|iMac(Pro1|1[3-9]|20)|MacBook(10|9|8)|Macmini[6-8]),\\d
pattern matches:
https://support.apple.com/en-us/HT201608
Supported:
MacBook10,1
MacBook9,1
MacBook8,1
Unsupported:
MacBook7,1
MacBook6,1
MacBook5,2
MacBook5,1
MacBook4,1
MacBook3,1
MacBook2,1
MacBook1,1
https://support.apple.com/en-us/HT201862
Supported:
MacBookAir9,1
MacBookAir8,2
MacBookAir8,1
MacBookAir7,2
MacBookAir7,2
MacBookAir7,1
MacBookAir6,2
MacBookAir6,1
MacBookAir6,2
MacBookAir6,1
MacBookAir5,2
MacBookAir5,1
Unsupported:
MacBookAir4,2
MacBookAir4,1
MacBookAir3,2
MacBookAir3,1
MacBookAir2,1
MacBookAir1,1
https://support.apple.com/en-us/HT201300
Supported:
MacBookPro16,3
MacBookPro16,2
MacBookPro16,1
MacBookPro15,4
MacBookPro15,3
MacBookPro15,2
MacBookPro15,1
MacBookPro14,3
MacBookPro14,2
MacBookPro14,1
MacBookPro13,3
MacBookPro13,2
MacBookPro13,1
MacBookPro11,5
MacBookPro11,4
MacBookPro12,1
MacBookPro11,3
MacBookPro11,2
MacBookPro11,1
MacBookPro10,1
MacBookPro11,1
MacBookPro10,2
MacBookPro10,1
MacBookPro9,2
MacBookPro9,1
Unsupported:
MacBookPro8,3
MacBookPro8,2
MacBookPro8,1
MacBookPro7,1
MacBookPro6,2
MacBookPro6,1
MacBookPro5,5
MacBookPro5,4
MacBookPro5,3
MacBookPro5,2
MacBookPro5,1
MacBookPro4,1
MacBookPro3,1
MacBookPro2,2
MacBookPro2,1
MacBookPro1,2
MacBookPro1,1
https://support.apple.com/en-us/HT201894
Supported:
Macmini8,1
Macmini7,1
Macmini6,2
Macmini6,1
Unsupported:
Macmini5,3
Macmini5,2
Macmini5,1
Macmini4,1
Macmini3,1
Macmini2,1
Macmini1,1
https://support.apple.com/en-us/HT201634
Supported:
iMac20,2
iMac20,1
iMac19,2
iMac19,1
iMac18,3
iMac18,2
iMac18,1
iMac17,1
iMac16,2
iMac16,1
iMac15,1
iMac14,4
iMac14,3
iMac14,2
iMac14,1
iMac13,2
iMac13,1
Unsupported:
iMac12,2
iMac12,1
iMac11,3
iMac11,2
iMac11,1
iMac10,1
iMac9,1
iMac8,1
iMac7,1
iMac6,1
iMac5,2
iMac5,1
iMac4,2
iMac4,1
iMac,1
https://support.apple.com/en-us/HT210222
Supported:
iMacPro1,1
https://support.apple.com/en-us/HT202888
Supported:
MacPro7,1
MacPro6,1
Unsupported:
MacPro5,1
MacPro4,1
MacPro3,1
MacPro2,1
MacPro1,1`;
// 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