Regex actual para que coincida con varias subredes delimitadas por un space rexp = /^([01]?\d\d?|2[0-4]\d|25[0-5])(?:\.[01]?\d\d?|2[0-4]\d|25[0-5]){3}(?:\/[0-2]\d|\/3[0-2])?$(\s(^([01]?\d\d?|2[0-4]\d|25[0-5])(?:\.[01]?\d\d?|2[0-4]\d|25[0-5]){3}(?:\/[0-2]\d|\/3[0-2])?$))*$/)

Cadena de prueba 192.168.2.1/24 192.168.2.1/32

2
Vaibhav Chauhan 16 oct. 2018 a las 21:00

2 respuestas

La mejor respuesta

Su expresión regular parece estar rota. Puedes probar este:

^([01]?\d\d?|2[0-4]\d|25[0-5])(?:\.[01]?\d\d?|2[0-4]\d|25[0-5]){3}(?:\/[0-2]\d|\/3[0-2])?(\s+([01]?\d\d?|2[0-4]\d|25[0-5])(?:\.[01]?\d\d?|2[0-4]\d|25[0-5]){3}(?:\/[0-2]\d|\/3[0-2]))*$

Otra opción es analizar la cadena usando Javascript y usar una expresión regular más simple para cada pieza. Aquí hay un ejemplo:

const s = '192.168.2.1/24 192.168.2.1/32 250.161.23.1/32 0.1.2.1/01';
const pattern = /([01]?\d\d?|2[0-4]\d|25[0-5])(?:\.[01]?\d\d?|2[0-4]\d|25[0-5]){3}(?:\/[0-2]\d|\/3[0-2])/;
const result = s.trim().split(/\s+/).map(e => e.match(pattern) != null).reduce((result, next) => result && next, true);
console.log(result);

Esto imprime:

true
1
HugoTeixeira 16 oct. 2018 a las 18:19

Aunque ciertamente puede descomponer la cadena usando expresiones regulares, podría ser mucho más fácil usar un código como este:

subnetsString = "192.168.2.1/24 192.168.2.1/32";
subnets = subnetsString.split(" ");
firstSubnet = subnets[0];
ip = firstSubnet.split("/")[0];

console.log(ip);  // output: 192.168.2.1
0
Falk Tandetzky 16 oct. 2018 a las 18:15