Tengo una matriz que contiene cadenas que representan números. Los únicos dos tipos válidos de elementos en la matriz son:
Este patrón se puede agregar a más valores en el futuro, es decir, xx-xxxxx y x-xx-xxx, donde todas las x siguen siendo números:
Tengo el siguiente código que resuelve 1 pero no 2:
const arr = ["ab's-test#s", "ab-c", "124", "123-12345"]; var arr2 = arr.filter(function(el) { return el.length && el==+el && el.match(new RegExp("^\\d{3}(-\\d{5})?$")); }); console.log(arr2)
Esto imprime ["124"]
Sin embargo, quiero que imprima ["124","123-12345"]
¿Hay alguna manera de permitir números y patrones numéricos como parte de la misma función de filtro? Gracias por adelantado.
Puede usar O condicional con expresiones regulares para probar que su cadena es un número o un número con el patrón xxx-xxxxx
.
const arr = ["ab's-test#s", "ab-c", "124", "123-12345"], arr2 = arr.filter((str) => /^\d{3}-\d{5}$/.test(str) || /^\d+$/.test(str)); console.log(arr2)
Puede usar un solo patrón colocando el o |
en la propia expresión regular, usando un grupo sin captura (?:....)
para hacer coincidir cualquiera de las alternativas entre los anclajes para afirmar el inicio y el final de la cadena:
El patrón actualizado se convertirá en:
^(?:\d{3}-\d{5}|\d+)$
const arr = ["ab's-test#s", "ab-c", "124", "123-12345"]; const arr2 = arr.filter(str => /^(?:\d{3}-\d{5}|\d+)$/.test(str)); console.log(arr2)