const regex = new RegExp('^(Mozilla/5\\.0 (\\(Linux; Android 6.0.1; Nexus 5X Build/MMB29P\\) )?(AppleWebKit/[0-9]+\\.[0-9]+ \\(KHTML, like Gecko[\\);] )?(Chrome/[0-9]{2,3}\\.[0-9]+\\.[0-9]+\\.[0-9]+ Mobile Safari/[0-9]+\\.[0-9]+ )?\\(?compatible; )?Googlebot((-Image|-Video)?/[0-9]\\.[0-9]|-News)(;? \\(?\\+http://www\\.google\\.com/bot\\.html\\)( Chrome/[0-9]{2,3}\\.[0-9]+\\.[0-9]+\\.[0-9]+ Safari/[0-9]+\\.[0-9]+)?)?$
', 'gm')
const str = `Valid GoogleBots:
Googlebot-Image/1.0
Googlebot-News
Googlebot-Video/1.0
Googlebot/2.1 (+http://www.google.com/bot.html)
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html) Chrome/80.20.123.1243 Safari/537.36
Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2213.123 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Invalid GoogleBots:
Googlebot
googlebot/2.1
Googlebot/2.1 (+http://www.google.com/bot.html) +IKAUE
`;
// 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