const regex = /^(mongodb(?:\+srv)?(\:)(?:\/{2}){1})(?:\w+\:\w+\@)?(\w+?(?:\.\w+?)*)(\:)(\d+(?:\/){0,1})(?:\/\w+?)?(?:\?\w+?\=\w+?(?:\&\w+?\=\w+?)*)?$/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^(mongodb(?:\\+srv)?(\\:)(?:\\\/{2}){1})(?:\\w+\\:\\w+\\@)?(\\w+?(?:\\.\\w+?)*)(\\:)(\\d+(?:\\\/){0,1})(?:\\\/\\w+?)?(?:\\?\\w+?\\=\\w+?(?:\\&\\w+?\\=\\w+?)*)?$', 'gm')
const str = `// Do not work //
mongodb://username:localhost:27107/adfaeadf
mongodb://username:@localhost:27107/adfaeadf
mongodb://:password@localhost:27107/adfaeadf
mongodb://:@localhost:27107/mydatabasename
mongodb://@localhost:27107/mydatabasename
mongodb:/ddd:333/fffvv
mongodb:username:password@localhost:27107/mydatabasename
mongodb://localhost:27107fffsfsf
mongodb://localhost:27107/mydatabasename/?option=val
// should validate //
mongodb://localhost:27107/mydatabasename
mongodb://user:pass@localhost:27107/mydatabasename
mongodb://user:pass@localhost:27107/MYDATABASENAME
mongodb+srv://localhost:333/ff
mongodb://localhost:27107/mydatabasename?option=val
mongodb://localhost:27107/mydatabasename?option=val&secondOption=val
mongodb://localhost:27107
mongodb://localhost:27107/
mongodb://dbexample.com:2333
mongodb://another.example.com:2555
`;
// 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