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

231
Vistas
¿Cómo agregar caracteres especiales/sin palabras en grupos definidos?

Tengo una expresión regular que me da grupos separados de cadenas.

expresión regular antigua

 const regex = /^(.*?)((?:\d{1,3}(?:,\d{1,3})*|\d+)(?:\.\d{1,5})?)(\D.*)?$/g;

nueva expresión regular que escribí pero no estoy seguro si es correcta

 const regex = /^(.*?)((?:([^\w\*])|(\d{1,3})(?:,\d{1,3})*|\d+)(?:\.\d{1,5})?)(\D.*)?$/g

aquí está mi explicación de expresiones regulares, que principalmente solía tener números en el Group 2 pero ahora que mi rango de entrada está aumentando, quiero que también - reconozca (carácter que no es una palabra).

Pero no sé si es posible agregar el Group 2 -

PD: no habrá ningún carácter diferente que no sea - o numbers La entrada es la siguiente

 const inputs= ["$200","$(200)%","100%","$-","$(52,000.5617)%","$30,000","45,444%"]; const regex = /^(.*?)((?:([^\w\*])|(\d{1,3})(?:,\d{1,3})*|\d+)(?:\.\d{1,5})?)(\D.*)?$/g; const text = inputs.match(regex); let [_, preText = "", number = "", postText = ""] = text;
 1. ^ - start of string (.*?) - Group 1 (preText): any zero or more chars other than line break chars, as few as possible 2. ((?:\d{1,3}(?:,\d{1,3})*|\d+)(?:\.\d{1,5})?) - Group 2 (number): one to three digits followed with zero or more occurrences of a comma and one to three digits, or just one or more digits, and then an optional sequence of a . and one to five digits 3. (\D.*)? - Group 3 (postText), optional: a non-digit char and then any zero or more chars other than line break chars, as many as possible $ - end of string.

Producción:

  1. este es el resultado que obtengo de mi expresión regular anterior
 [_ = "$(52,000.5617)%", preText = "$", number = "52,000.5617", postText = ")%"]
  1. este es mi resultado esperado
 [_ = "$-", preText = "$", number = "-", postText = ""]
  1. sin preText
 [_ = "45,444%", preText = "", number = "45,444", postText = "%"]
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede hacer que el patrón sea un poco más específico y luego permitir/no permitir lo que desea capturar.

Puede usar 3 grupos de captura opcionales que no tengan coincidencias superpuestas y usar una búsqueda anticipada negativa que no coincida con una cadena vacía.

 ^(?!$)(\$?[^\d\n-]*)(-?(?:\d{1,3}(?:,\d{3})*(?:\.\d{1,5})?|\d+)?)([^\d\n]*)$

Explicación

  • ^ Comienzo de cadena
  • (?!$) Afirma no directamente el final de la cadena
  • (\$?) Grupo de captura 1 , emparejar $ opcional
  • [^\d\n-]* Opcionalmente, haga coincidir caracteres que no sean un dígito, nueva línea o -
  • ( Grupo de captura 2
    • -? Partido opcional -
    • (?: grupo de no captura
      • \d{1,3} Coincide con 1-3 dígitos
      • (?:,\d{3})* Repetir 1+ veces , 3 dígitos
      • (?:\.\d{1,5})? Partido opcional . y 1-5 dígitos
      • | O
      • \d+ Coincide con 1+ dígitos
    • )? Cierre el grupo de no captura y hágalo opcional
  • ) Cerrar grupo 2
  • ([^\d\n]*) Capturar el grupo 3 , hacer coincidir los caracteres que no sean un dígito o una nueva línea

Demostración de expresiones regulares

 const inputs = ["$200", "$(200)%", "100%", "$-", "$(52,000.5617)%", "$30,000", "45,444%"]; const regex = /^(?!$)(\$?[^\d\n-]*)(-?(?:\d{1,3}(?:,\d{3})*(?:\.\d{1,5})?|\d+)?)([^\d\n]*)$/; inputs.forEach(s => { const m = s.match(regex); if (m) { let [_, preText = "", number = "", postText = ""] = m; console.log("input --> " + s); console.log("preText --> " + preText); console.log("number --> " + number); console.log("postText --> " + postText); console.log("------------------------------------"); } });

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