const regex = /\b # Leading marker
(?P<byte> # Define a full byte
25[012345] | # the numers 250 - 255 or
2[01234](?P<digit>[0123456789]) | # 200 - 249 or
1(?&digit){2} | # 100 - 199 or
#0? # Allow leading zero
[1-9](?&digit) | # 10 - 99 or
#0{0,2} # Allow leading zeros
(?&digit) # 0 - 9
) # close one full byte
(\.(?&byte)){3} # Repeat three more bytes.
\b # Trailing marker/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('\\b # Leading marker
(?P<byte> # Define a full byte
25[012345] | # the numers 250 - 255 or
2[01234](?P<digit>[0123456789]) | # 200 - 249 or
1(?&digit){2} | # 100 - 199 or
#0? # Allow leading zero
[1-9](?&digit) | # 10 - 99 or
#0{0,2} # Allow leading zeros
(?&digit) # 0 - 9
) # close one full byte
(\\.(?&byte)){3} # Repeat three more bytes.
\\b # Trailing marker', 'gm')
const str = `0.0.0.0 00.00.00.00 000.000.000.000
1.2.3.4 01.02.03.04 001.002.003.004
11.22.3.44 11.22.03.44 011.022.033.044
23.34.34.5 23.34.34.05 123.234.034.005
1.1.192.168 01.01.192.168 001.001.192.168
text 123.234.34.123 more text
text123.234.34.123more text
1.2.3.255
1.2.3.256
255.255.255.255
256.2.3.4
1123.234.34.123
123.234.34.1235
.123.234.34.123
123.234.34.123.
not 1.1.168.192 in 1.1.168.192.in-addr.arpa.
not 1.14.2.90 in xserver-common_1.14.2.901-2_all.deb
1.2.3.4`;
// 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