const regex = /(?<href>(?<origin>(?<protocol>(?<scheme>[a-z][\w\-]{2,}):)?(?:\/\/)?)?(?:(?<username>[^:\s]*):(?<password>[^@\s]*)@)?(?<host>(?<hostname>\B\.{1,2}\B(?=[a-z\d]|\/)|(?:[a-z][a-z-]*)(?:\.[a-z][a-z-\.]*|(?=\/))|(?:[^\s\$]\d[a-z\d-]*)(?:\.[a-z][a-z-\.]*)|(?:(?:25[0-5]|(?:2[0-4]|1\d|[1-9]|)\d)(?:\.(?!$)|$)){4}|localhost)(?:\:(?<port>\d+))?)(?<pathname>\/[^?#\s]*)?(?<search>\?[^#\s]*)?(?<hash>#[^\s]*)?)/i;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('(?<href>(?<origin>(?<protocol>(?<scheme>[a-z][\\w\\-]{2,}):)?(?:\\\/\\\/)?)?(?:(?<username>[^:\\s]*):(?<password>[^@\\s]*)@)?(?<host>(?<hostname>\\B\\.{1,2}\\B(?=[a-z\\d]|\\\/)|(?:[a-z][a-z-]*)(?:\\.[a-z][a-z-\\.]*|(?=\\\/))|(?:[^\\s\\$]\\d[a-z\\d-]*)(?:\\.[a-z][a-z-\\.]*)|(?:(?:25[0-5]|(?:2[0-4]|1\\d|[1-9]|)\\d)(?:\\.(?!$)|$)){4}|localhost)(?:\\:(?<port>\\d+))?)(?<pathname>\\\/[^?#\\s]*)?(?<search>\\?[^#\\s]*)?(?<hash>#[^\\s]*)?)', 'i')
const str = `https://user:pass@api.twitch.tv:8080/Kshipa?popout=true#unload`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
if ((m = regex.exec(str)) !== null) {
// 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