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

493
Visualizações
Regex condicional (?) para números

estaba tratando de crear una expresión regular que pudiera coincidir con los números entre paréntesis o no, por ejemplo:

 (1.000.000,00) //match (1.000,00) //match (100,00) //match (10) //match (1) //match (2.000.000,00 //dont't match (2.000,00 //dont't match (200,00 //dont't match (20 //dont't match (2 //dont't match 3.000.000,00) //dont't match 3.000,00) //dont't match 300,00) //dont't match 30) //dont't match 3) //dont't match 4.000.000,00 //should match 4.000,00 //should match 400,00 //should match 40 //should match 4 //should match

Necesito hacer coincidir solo números (entre paréntesis o no), pero solo si tienen todos los corchetes (2) o ninguno (0)

Por el momento esto es lo que se me ocurrió: \((\d+[\.,]?)+\d*\) , coincide con --match y no coincide con --dont match pero debería coincide también con --debería coincidir

Agregué la etiqueta javascript porque estoy usando esta expresión regular en js y no todos los tokens de expresión regular funcionan en el constructor js regex

Estoy publicando también un enlace regex101

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Si es compatible, puede usar una mirada negativa hacia atrás para hacer coincidir con o sin paréntesis:

 \(\d+(?:[.,]\d+)*\)|(?<!\S)\d+(?:[.,]\d+)*(?!\S)
  • \( Partido (
  • \d+(?:[.,]\d+)* Coincide con 1+ dígitos y, opcionalmente, repite la coincidencia . o , y nuevamente 1+ dígitos
  • \) Partido )
  • | O
  • (?<!\S) Negativo mirar hacia atrás, afirmar un límite de palabra a la izquierda
  • \d+(?:[.,]\d+)* Coincide con 1+ dígitos y, opcionalmente, repite la coincidencia . o , y nuevamente 1+ dígitos
  • (?!\S) Anticipación negativa, afirmar un límite de espacio en blanco a la derecha

Demostración de expresiones regulares

Otra opción podría ser hacer coincidir paréntesis opcionales en ambos lados, y solo mantener los que tienen un paréntesis de apertura y cierre, o ninguno.

 const regex = /\(?\d+(?:[.,]?\d+)*\)?/ const strings = ["(1.000.000,00)", "(1.000,00)", "(100,00)", "(10)", "(1)", "(2.000.000,00", "(2.000,00", "(200,00", "(20", "(2", "3.000.000,00)", "3.000,00)", "300,00)", "30)", "3)", "4.000.000,00", "4.000,00", "400,00", "40", "4"]; strings.forEach(s => { const m = s.match(regex); const firstChar = s.charAt(0); const lastChar = s.charAt(s.length - 1); if ( m && (firstChar !== '(' && lastChar !== ')') || firstChar === '(' && lastChar === ')' ) { console.log(s) } });

about 4 years ago · Juan Pablo Isaza Relatório

0

Editar: esto está roto. Coincidirá con números como (7, ya que solo coincide con el número e ignora los paréntesis en ese caso.

Conservado aquí para referencia futura.

Por lo general, es más fácil hacer expresiones regulares en varias pasadas, pero aquí va:

 /(\((\d+[\.,]?)+\d*\))|(\d+[\.,]?\d*)/gm

Puede probarlo en https://regex101.com/ . Por lo general, es mejor procesar algo en varias pasadas, ya que puede ver que la expresión regular se vuelve aún más ilegible. Tomé su expresión regular y la dividí en dos expresiones regulares: una que requiere los paréntesis y otra que no, luego las combiné con el operador o. Tenga en cuenta que esta expresión regular permitirá cosas como "123.3,5.7" como un número, y los grupos de captura serán desagradables.

about 4 years ago · Juan Pablo Isaza Relatório

0

Si no desea repetir los números de coincidencia de partes (que en este caso es corto, por lo que tal vez se justifique una excepción a la regla DRY), puede buscar \(?((\d+[\.,]?)+\d*)\)?(?<=\(\1\)|(^|[^(\d.,])\1(?=($|[^\d.,)]))) .

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