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

229
Vistas
¿Cómo hacer coincidir una expresión regular con otra expresión regular en javascript?

Quiero ver si hay coincidencias entre mis dos expresiones regulares. Para hacer esto, solo realizo una .test entre sí, y si uno de ellos coincide con true , los considero coincidentes.

 const toRegex = (str) => new RegExp( '^' + str .replace(/[\-\[\]\/\{\}\(\)\+\.\\\^\$\|]/g, '\\$&') .replace(/\*/g, '.*') .replace(/\?/g, '.') + '$', ); const compare = ( stringA, stringB, ) => { return ( toRegex(stringA).test(stringB) || toRegex(stringB).test(stringA) ); };

Para los comodines al final del texto, funciona de maravilla.

 const stringA = 'john:alex:*'; const stringB = 'john:*'; console.log('compare', compare(stringA, stringB)) // true

Sin embargo, no pude hacer que la función funcionara si había palabras adicionales al final. Quiero que mi función trate la cadena A que contiene un comodín, como igual a la palabra doe en la cadena B.

 const stringA = 'john:alex:*'; const stringB = 'john:*:doe'; console.log('compare', compare(stringA, stringB)) // false

Al comparar dos expresiones regulares separadas, ¿cómo puedo lograr esto? Agradecería alguna ayuda con esto.

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

0

Suponiendo que * significa "cualquier número de caracteres", su relación de equivalencia se puede escribir como

  • si A está vacío, entonces verdadero si B también está vacío, de lo contrario falso
  • dividir A y B en una cabeza (= primer carácter) y una cola (el resto)
  • si caras son iguales, entonces compara ambas colas
  • si la cabeza de A es *, entonces pruebe la cola de A contra B, luego B.slice(1), luego B.slice(2), etc...
  • si la cabeza de B es *, intercambia A y B
  • de lo contrario, falso

 function isEq(a, b) { if (!a || !b) return a === b; let [headA, tailA] = [a[0], a.slice(1)] let [headB, tailB] = [b[0], b.slice(1)] if (headA === headB) return isEq(tailA, tailB); if (headA === '*') { for (let i = 0; i <= b.length; i++) if (isEq(tailA, b.slice(i))) return true; return false; } if (headB === '*') return isEq(b, a) return false; } console.log(isEq( 'john:alex:*', 'john:*:doe' )) console.log(isEq( 'john:alex:*', 'john:*' )) console.log(isEq( 'john:*:X', 'john:*:Y' ))

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