Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

124
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda