Encontrar enteros no negativos
Tenemos un string de números enteros.
Crea una expresión regular que encuentre solamente los no negativos (el cero está permitido).
Un ejemplo de uso:
let regexp = /tu regexp/g;
let str = "0 12 -5 123 -18";
alert( str.match(regexp) ); // 0, 12, 123
La expresión regular para un número entero es \d+
.
Podemos excluir los negativos anteponiendo un “lookbehind negativo”: (?<!-)\d+
.
Pero al probarlo, notamos un resultado de más:
let regexp = /(?<!-)\d+/g;
let str = "0 12 -5 123 -18";
console.log( str.match(regexp) ); // 0, 12, 123, 8
Como puedes ver, hay coincidencia de 8
, con -18
. Para excluirla necesitamos asegurarnos de que regexp
no comience la búsqueda desde el medio de otro número (no coincidente).
Podemos hacerlo especificando otra precedencia “lookbehind negativo”: (?<!-)(?<!\d)\d+
. Ahora (?<!\d)
asegura que la coicidencia no comienza después de otro dígito, justo lo que necesitamos.
También podemos unirlos en un único “lookbehind”:
let regexp = /(?<![-\d])\d+/g;
let str = "0 12 -5 123 -18";
alert( str.match(regexp) ); // 0, 12, 123