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

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

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 Report

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 Report

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 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!