Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

235
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!