const regex = new RegExp('(https?://[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}[-a-zA-Z0-9()@:%_+.~#?&/=]*/?([-a-zA-Z0-9()@%_+~#?&/=]|\\b))', 'gm')
const str = `Visit https://example.com for more information.
Check out https://github.com/user/repo, it's really good.
The API endpoint is https://api.service.com/v1/data; use it carefully.
Go to https://example.com: it has everything you need.
See https://docs.example.com? It explains the process.
Try https://example.com! It's amazing.
The site (https://example.com) is down for maintenance.
Links like https://example.com are common in emails.
Visit https://example.com/path/file.pdf and download it.
The URL https://example.com/api?key=123 returns JSON data.
Check https://example.com, https://test.org, and https://demo.net.
Go to https://example.com... wait, that's the wrong link.
The website https://example.com-- actually, never mind.
Visit https://example.com/path?q=value&r=2 for the search results.
See https://example.com/file.html, then click the button.
The documentation at https://docs.example.com; section 4.2 explains it.
Try https://example.com:8080/api/v1/users for user data.
Links: https://example.com, https://test.org; both are useful.
Go to https://example.com/path/to/resource, download the file.
The URL https://example.com/path#section contains the answer.
Visit https://example.com/very/long/path/here for details.
Check https://sub.domain.example.com for subdomain content.
The site https://example.com/path.with.dots has interesting content.
Go to https://example.com/path-with-dashes?, it's well organized.
See https://example.com/path_with_underscores for more info.
The endpoint https://api.example.com/v2/data?format=json returns data.
Visit https://example.com/file.tar.gz to download the archive.
Check https://example.com/path?param=value.with.dots for configuration.
The URL https://192.168.1.1:8080 is for local testing.
Go to https://example.com/path/ (note the trailing slash).`;
// 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