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

122
Views
Regex coincide con los números en la fecha, pero no debería

¿Por qué mi patrón de expresiones regulares coincide con la parte de la fecha de la cadena? Parece que no estoy teniendo en cuenta la / (barra oblicua) correctamente con [^\/] para evitar que el patrón coincida con las cadenas de fecha.

 const reg = new RegExp( /(USD|\$|EUR|€|USDC|USDT)?\s?(\d+[^\/]|\d{1,3}(,\d{3})*)(\.\d+)?(k|K|m|M)?\b/, "i" ); const str = "02/22/2021 $50k"; console.log(reg.exec(str)); // result: ['02', undefined, '02', undefined, undefined, undefined, undefined, index: 0, input: '02/22/2021 $50k', groups: undefined] // was expecting: [$50k,...]

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

0

Obtiene esas coincidencias para la parte de la fecha y las indefinidas, porque usa un patrón con partes y alternancias opcionales |

En tu patrón hay esta parte (\d+[^\/]|\d{1,3}(,\d{3})*) . Esa primera parte de la alternancia \d+[^\/] coincide con 1+ dígitos seguidos de cualquier carácter excepto / (que también puede coincidir con un dígito) y la cantidad mínima de caracteres es 2. Esa parte coincidirá con 20, 22 y 2021 en la parte de la fecha.

Si hay 1 dígito, la segunda parte de la alternancia lo coincidirá.


Si también desea hacer coincidir solo números, puede afirmar no / a la izquierda y a la derecha, y hacer que la parte completa con las primeras alternativas como USD sea opcional con los caracteres de espacio en blanco opcionales también, para evitar que coincidan solo antes de dígitos.

¿La última alternancia se puede acortar a una clase de carácter [km]? con una bandera que no distingue entre mayúsculas y minúsculas.

Consulte esta página para conocer el soporte de búsqueda posterior para Javascript.

 (?:(?:USD|\$|EUR|€|USDC|USDT)\s?)?(?<!\/)\b(?:\d{1,3}(?:,\d{3})*(?:\.\d+)?|\d+)(?!\/)[KkMm]?\b

Demostración de expresiones regulares

 const reg = /(?:(?:USD|\$|EUR|€|USDC|USDT)\s?)?(?<!\/)\b(?:\d{1,3}(?:,\d{3})*(?:\.\d+)?|\d+)(?!\/)[KkMm]?\b/gi; const str = "02/22/2021 $50k 1,213.3 11111111 $50,000 $50000" const res = Array.from(str.matchAll(reg), m => m[0]); console.log(res)

Si la moneda no es opcional:

 (?:USD|\$|EUR|€|USDC|USDT)\s?(?:\d{1,3}(?:,\d{3})*(?:\.\d+)?|\d+)[KkMm]?\b

Demostración de expresiones regulares

about 4 years ago · Juan Pablo Isaza Report

0

No puedo entender bien tu expresión regular. así que trato de averiguar qué resultado esperaría. Mira esto. en grupos tienes cada parte de tu cadena.

 const regex = /(\d{2})*\/?(\d{2})\/(\d{2,4})?\s*(USD|\$|EUR|€|USDC|USDT)?(\d*)(k|K|m|M)?\b/i const regexNamed = /(?<day>\d{2})*\/?(?<month>\d{2})\/(?<year>\d{2,4})?\s*(?<currency>USD|\$|EUR|€|USDC|USDT)?(?<value>\d*)(?<unit>k|K|m|M)?\b/i const str1 = '02/22/2021 $50k' const str2 = '02/2021 €50m' const m1 = str1.match(regex) const m2 = str2.match(regexNamed) console.log(m1) console.log(m2.groups)

Cita en bloque

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!