const regex = new RegExp('(?:(?<=^)|(?<=\\s))(?:(?:ht|f)tps?://)?(?!\\d+\\.)((?:[^\\W_]|-)[^\\W_]*(?:-[^\\W_]*)*(?:\\.(?:[^\\W_]|-)[^\\W_]*(?:-[^\\W_]*)*)*\\.[^\\W_][^\\W_]*)(?:\\s|$)', 'g')
const str = `IP Address:
93.114.205.169
0.0.0.0
0.0.0.0
10.10.10.10
99.99.99.99
199.199.199.199
255.255.255.255
256.256.256.256
02.02.02.02
111.222.13.255
1.2.3.4
1.2.3.4.5
11.22.33.44
11.22.33.44.55
255.0.1.254
255.0.1.254
In a text 255.0.1.254 there is an IP address
In a text 10.10.10.10 there is an IP address
In a text 93.114.205.169 there is an IP address
Domain:
example.com
https://sub5-7.example.com/
https://sub5-7.example.com
sub.sub2.example.com
www.example.com
https://sub.example.com
http://example.com
ftp://sub.mit-example222.com
In a text www.example.com there is an domain.
In a text https://sub5-7.example.com there is an domain.
In a text www.example.com there is an domain.
URL
93.114.205.169/path
example.com/path
sub.example.com/path
93.114.205.169/path
https://sub5-7.example.com/
http://example.com/
example.com/
sub.example.com/
www.--example.com/
www.examp--le.com/
www.example.co/
www.example.c/
example.com/path
sub.example.com/path
sub.example.com/path
sub.example.com/path
sub.example.com/path/path/path/p/a/q/1\$%h
sub.example.com/path/path/path/p/a/q/1\$%1fh
sub.example.com/path/path/%aa%1f%3dpath/p/a/q/1\$%1fh
https://sub.example.com/path/path
http://sub.example.com/path/path
http://something.com/#\$SLJFHsdq32908432098=!~abc
In a text example.com/path there is an URL path.
In a text www.example.com/path there is an URL path.
In a text www.blog.example.com/path there is an URL path.
In a text sub.example.com/paththere is an URL path.
In a text sub.example.com/path/path/path/p/a/q/1\$%h there is an URL path.
In a text sub.example.com/path/path/path/p/a/q/ there is an URL path.
`;
// 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