const regex = /^(https?:\/\/)? # optional scheme
((?:[-a-z0-9._~!$&\'()*+,;=]|%[0-9a-f]{2})+ # optional username@,
(?::(?:[-a-z0-9._~!$&\'()*+,;=]|%[0-9a-f]{2})+)?@)? # or username:password@
(?:((?:(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(?:\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])) # IPv4 address
|((?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z][a-z0-9-]*[a-z0-9])) # or dot-separated domain labels
(:\d+)? # optional port number
((?:\/(?:[-a-z0-9._~!$&\'()*+,;=:@]|%[0-9a-f]{2})+)*\/?) # path (possibly empty, may end in /, no double-// allowed)
(\?(?:[-a-z0-9._~!$&\'()*+,;=:@\/?]|%[0-9a-f]{2})*)? # optional querystring
(\#(?:[-a-z0-9._~!$&\'()*+,;=:@\/?]|%[0-9a-f]{2})*)?$ # optional fragment/i;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^(https?:\\\/\\\/)? # optional scheme
((?:[-a-z0-9._~!$&\\\'()*+,;=]|%[0-9a-f]{2})+ # optional username@,
(?::(?:[-a-z0-9._~!$&\\\'()*+,;=]|%[0-9a-f]{2})+)?@)? # or username:password@
(?:((?:(?:\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])) # IPv4 address
|((?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z][a-z0-9-]*[a-z0-9])) # or dot-separated domain labels
(:\\d+)? # optional port number
((?:\\\/(?:[-a-z0-9._~!$&\\\'()*+,;=:@]|%[0-9a-f]{2})+)*\\\/?) # path (possibly empty, may end in \/, no double-\/\/ allowed)
(\\?(?:[-a-z0-9._~!$&\\\'()*+,;=:@\\\/?]|%[0-9a-f]{2})*)? # optional querystring
(\\#(?:[-a-z0-9._~!$&\\\'()*+,;=:@\\\/?]|%[0-9a-f]{2})*)?$ # optional fragment', 'i')
const str = `www.hwholdsworth.com:80/a/b/c?j=k#z`;
// 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