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

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

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