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

245
Views
obteniendo "demasiadas recursiones" al validar js a través de expresiones regulares

Estoy tratando de validar un nombre de usuario con RegEx en Javascript y, aunque el resultado de .test es verdadero, todo funciona bien, pero (a veces) cuando uso una cadena que no coincide, mi aplicación se rompe y aparece el error Demasiada recursividad . Quiero saber en qué parte de mi RegEx (o código) me equivoqué para causar tal cosa.

Este es mi código (RegEx):

 console.log(/^[A-Za-zÀ-ÖØ-öø-ÿ]([ _]?[A-Za-z0-9À-ÖØ-öø-ÿ]+)+$/g.test("RegExr was created by gskinner_com_and is proudly hosted by Media Temple"));

Quiero que la cadena correcta comience con una letra, luego tenga cualquier combinación de letras y dígitos con espacios y guiones bajos permitidos entre ellos, pero solo uno a la vez.

La expresión regular funciona en sitios web relacionados con la prueba, y en mi propio código, y recibo el error cuando la entrada no válida está lejos del comienzo de la cadena, de hecho, mi computadora tarda más en calcular el resultado cuanto más pongo el error (Digamos un punto o 2 espacios uno detrás del otro) hasta que en cierto punto me sale el error. o el uso de demasiados caracteres como ¿Cuál es el problema? posición del $ o el uso de demasiados caracteres como À-ÖØ-öø-ÿ ? y que puedo hacer para solucionarlo?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

El retroceso catastrófico se debe a los cuantificadores anidados en el grupo. Si el patrón no puede coincidir, los cuantificadores anidados permiten que muchas posiciones retrocedan, aún tratando de obtener una coincidencia.

Puede comenzar el patrón haciendo coincidir un solo carácter y luego, opcionalmente, hacer coincidir uno de la clase de caracteres [A-Za-z0-9À-ÖØ-öø-ÿ]*

Luego, en el grupo repetido, haga coincidir un espacio o un guión bajo [ _] seguido de 1 o más veces la clase de carácter ya existente [A-Za-z0-9À-ÖØ-öø-ÿ]+

Esto no desactiva el retroceso, sino que elimina un cuantificador anidado para permitir menos posiciones a las que retroceder.

Tenga en cuenta que repetir un grupo de captura captura el valor de la última iteración. Si no necesita el valor del grupo de captura después, puede convertirlo en un grupo que no sea de captura utilizando (?: en su lugar.

 ^[A-Za-zÀ-ÖØ-öø-ÿ][A-Za-z0-9À-ÖØ-öø-ÿ]*(?:[ _][A-Za-z0-9À-ÖØ-öø-ÿ]+)+$

Demostración de expresiones regulares

Para hacer coincidir también una sola palabra, puede hacer que el cuantificador * para el grupo coincida cero o más veces:

 ^[A-Za-zÀ-ÖØ-öø-ÿ][A-Za-z0-9À-ÖØ-öø-ÿ]*([ _][A-Za-z0-9À-ÖØ-öø-ÿ]+)*$

Demostración de expresiones regulares

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!