Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

168
Vistas
buscar texto en una matriz usando expresiones regulares en javascript

Soy muy nuevo en la búsqueda de texto en una matriz, algunos elementos en la matriz están en los guardabosques, es decir, no puede ser nada después de cierto texto en este AA y A regex y tengo una matriz multidimensional y quiero buscar texto en cada matriz. Así que escribí algo como esto. Puse AA* en la matriz para que solo coincidieran los 2 primeros caracteres y A* para una sola coincidencia de caracteres.

 arr = [ ["AA*","ABC","XYZ"] , ["A*","AXY","AAJ"] ] var text = "AA3"; for ($i=0; $i<arr.length; $i++ ){ var new_array = []; new_array = arr[$i]; new_array.filter(function(array_element) { var result = new RegExp(array_element).test(text); if( result == true){ console.log(arr[$i]); } }); }

Entonces, lo que quiero es cuando el texto = "AA3" o cualquier cosa después del doble A AA [cualquier cosa] y la salida debe ser la primera matriz que es ["AA *", "ABC", "XYZ"] pero obtengo ambas matrices como salida y cuando el texto = "A3" , la salida debe ser la segunda matriz que es ["A *", "POI", "LKJ"] pero obtengo ambas matrices. Pero si el texto = "ABC" o el texto = "AAJ" entonces debería generar la primera matriz o la segunda matriz respectivamente. No sé nada sobre cómo escribir expresiones regulares o si hay alguna forma en que pueda implementar esto usando cualquier otro método. Gracias de antemano cualquier consejo será útil.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Resumen

En resumen, ¡el problema es "*"! El * que se encuentra en los miembros de la matriz establecida es la razón por la que obtiene la misma matriz cada vez.

Información detallada

Regexp es un concepto que la mayoría de los desarrolladores encuentran difícil de entender (soy uno de esos por cierto 😅).

Comenzaré con un extracto de introducción a Regexp en MDN

Regexp son patrones usados para hacer coincidir combinaciones de caracteres en cadenas - MDN

Con eso en mente, desea comprender qué sucede con su código. Cuando crea un Regex como /A*/ para probar "AA3" , lo que coincidiría sería A , AA , etc. Esta es una verdad en javascript. Querría una coincidencia más estricta con ^ o $ o una coincidencia estricta de un número con \d .

Reescribí tu código como una función a continuación:

 arr = [ ["AA*", "ABC", "XYZ"], ["A*", "AXY", "AAJ"], ]; findInArray(arr, "AA3") // prints both array findInArray(arr, "AAJ") // prints second array findInArray(arr, "ABC") // prints first array function findInArray(array, value) { return array.filter((subArray) => subArray.some((item) => { const check = new RegExp(value); return check.test(item); }) ); }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Problema

El problema radica en el hecho de que usa cada una de las cadenas como una expresión regular.

  • Para una cadena con un comodín * , esto se evalúa como cero o más coincidencias del elemento inmediatamente anterior, que siempre será true .
  • Para una cadena que consta únicamente de caracteres alfanuméricos, esto es comparar una cadena consigo misma, lo que de manera similar siempre dará true .
  • Para las cadenas que contienen caracteres que constituyen la definición de sintaxis de la expresión regular, esto podría generar errores o un comportamiento no deseado.

Artículo de MDN sobre cuantificadores RegExp

Volver a escribir

Suposiciones:

  • El valor con un comodín * siempre está solo en la posición 0 ,
  • Solo hay un comodín de este tipo en su cadena,
  • La pregunta menciona que para text = 'AAJ' solo se devolverá la segunda matriz, pero tanto el AA* de la primera matriz como el AAJ de la segunda parecen coincidir con este text .
    Como tal, asumo que el comodín solo puede representar un número (como parecen sugerir otros ejemplos).

Código:

 const abc = (arrs, text) => { return arrs.filter(arr => { const regex = new RegExp(`^${arr[0].replace('*', '\\d+')}$`); return regex.test(text) || arr.includes(text); }) } const arr = [ ["AA*", "ABC", "XYZ"], ["A*", "AXY", "AAJ"] ]; console.log( `1=[${abc(arr, "AA3")}] 2=[${abc(arr, "ABC")}] 3=[${abc(arr, "AAJ")}]`);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda