const regex = new RegExp('(?:\\s|^) # Start of string or word boundary
( # Capture Group
(?: # Non-Capture Group for X.
(?: # Nested NCG for 0..255
(?:\\d){1,2}| # Allow any single digit or any pair of digits or
(?:1\\d{2})| # 3 Digits starting with 1 or
(?:2[0-4]\\d)| # 3 Digists starting with 20..24 or
(?:25[0-5]) # 250..255
) # this should allow X=0..255 in the NCG
\\. # Must be followed by a literal .
){3} # X. Must repeat exactly 3 times
(?: # NCG for final 0..255
(?:\\d{1,2})| # Allow any single digit or any pair of digits or
(?:1\\d{2})| # 3 Digits starting with 1 or
(?:2[0-4]\\d)| # 3 digits starting 20..24 or
(?:25[0-5]) # 250.255
) # End of final 0.255
) # End of capture group
(?:\\s|$) # Must be followed by EOS or wspace', 'g')
const str = `123.123.123.145 is an IP4 so is 1.2.3.4 and 1.22.33.44 but 256.1.2.3 isn't 254.1.2.3 is but 260.1.1.1 isn't nor 2.5.256.1 and 1.2.3.4:222 IP6 1.2.3.4.5.6`;
// 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