const regex = new RegExp('^(?>(?\\'protocol\\'[a-zA-Z]+)://)?(?\\'domain\\'[a-zA-Z0-9.\\-_]*)?(?>:(?\\'port\\'\\d{1,5}))?/(?\\'path\\'[a-zA-Z0-9_\\-%]+)(?:(?>\\?(?\\'query\\'[a-zA-Z0-9_\\-=&%]+))()|(?>#(?\\'anchor\\'[a-zA-Z0-9_\\-%]+))()){0,2}$', 'gm')
const str = `https://localhost:5000/test?id=10&class=5#header
http://example.com:443/test#header
ws://example.com/test?id=10&class=5
/test?id=10&class=5
/test?t=10
/test#10
/test%20test
/test#10?data=test`;
const subst = `protocol: ${protocol}\nhost name: ${domain}\nport: ${port}\npath: /${path}\nquery: ${query}\nanchor: ${anchor}\n`;
// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);
console.log('Substitution result: ', result);
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