Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

193
Visualizações
¿Puedo crear una expresión regular en JavaScript que valide una fórmula matemática específica: letras y corchetes, donde los corchetes no deben anidarse?

Quiero validar un campo de entrada con expresión regular en JavaScript, que debería validar los siguientes casos:

Válido:

 A and B and C and D (A or B) and C (A or B or C) and D (A or B or C or D) and E A and (B or C) and D A and (B or C) or (C and D) A or (B and C) (A and B) or (C and D)

Inválido:

 A and B and C and (A or B and C (A or B or C) and D or (A or B or C or D and E A and or (B or C) and D A and (B or (C and D))) A (B and C) (A and B) or C and D) (A and B or C and D)

Básicamente, necesito una letra de la A a la Z (solo en mayúsculas) seguida de "y" o "o" y paréntesis ilimitados, pero la cantidad de paréntesis de apertura debe coincidir con la cantidad de paréntesis de cierre. Además, después de un corchete de apertura, debería poder insertar solo AZ en mayúsculas y después de un corchete de cierre, "y", "o" o AZ en mayúsculas también deberían ser válidos. Los corchetes anidados tampoco deberían ser válidos.

Se me ocurrió esta solución, pero solo está validando AZ en mayúsculas, "y" y "o" palabras y corchetes, por lo que todos los casos no válidos proporcionados coinciden con mi expresión regular.

 /^[AZ(]?[AZ]| |and|or|[(]|[AZ]|[)]/gm
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Sin corchetes anidados, esto es fácil. Una cláusula disyuntiva de la forma normal conjuntiva es

 [AZ]( or [AZ])*

Con paréntesis requeridos alrededor de cláusulas usando or :

 [AZ]|\([AZ]( or [AZ])*\)

La fórmula completa sería entonces

 ([AZ]|\([AZ]( or [AZ])*\))( and ([AZ]|\([AZ]( or [AZ])*\)))*
about 4 years ago · Juan Pablo Isaza Relatório

0

Una expresión regular JS podría ser:

 ^(?!\([^()]*\)$|.*([()])[^()]*(?=\1)|[^()]*[()](?:[^()]*[()][^()]*[()])*[^()]*$|.*\([AZ]\))\(?[AZ](?: (?:and|or) \(?[AZ]\)?)*$

Ver una demostración en línea


  • ^ - Anclaje de línea de salida;
  • (?! - Abre una búsqueda anticipada negativa con alternancias;
    • \([^()]*\)$ : evita una coincidencia con un paréntesis de apertura, 0+ caracteres que no sean paréntesis y un paréntesis de cierre. O;
    • .*([()])[^()]*(?=\1) - 0+ Carácter hasta un paréntesis de apertura/cierre en un primer grupo de captura seguido de 0+ caracteres que no sean paréntesis hasta una referencia inversa al primer grupo. O;
    • [^()]*[()](?:[^()]*[()][^()]*[()])*[^()]*$ - Una comprobación de paréntesis desequilibrada. El patrón exigirá que haya un múltiplo de dos paréntesis si se ha utilizado alguno. O;
    • .*\([AZ]\) - Prueba para 0+ caracteres seguidos de apertura, letra mayúscula y cierre directo, para evitar una entrada tipo (A) ;
  • \(?[AZ] - Coincide con un paréntesis opcional seguido de AZ (para permitir que una sola letra también sea una coincidencia válida);
  • (?: (?:and|or) \(?[AZ]\)?)* - Abre un grupo sin captura para que coincida con un espacio, un grupo sin captura anidado para que coincida y|o seguido de otro espacio, un paréntesis de apertura opcional, otra letra mayúscula y un paréntesis de cierre opcional. Esta agrupación coincide más de 0 veces;
  • $ - Anclaje de línea final.
about 4 years ago · Juan Pablo Isaza Relatório

0

Uno realmente interesante... Jugando un poco con los límites de las palabras , el más corto que se me ocurrió hasta ahora:

 ^(?:(?: (?:or|and) )?(?:\b[AZ]|\B\([AZ](?: (?:or|and) [AZ])+\)\B)){2,}$

Aquí hay una demostración en regex101

Avíseme dónde/si falla, tengo la sensación de que todavía no funciona correctamente.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda