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

342
Views
¿Cómo separar los símbolos del texto con expresiones regulares?

Tengo un nodo de texto en el que tengo los datos como estos data=$(2000)% , por lo que quiero separar los símbolos y el número.

 let preText = '' let number = '' let postText = '' let data = '$(2000)%' const regex = new RegExp(`(\(\[)?[0-9]{1,3}(?:,[0-9]{1,3})*(\.[0-9]{1,5})?(\)\])?`); data.match(regex) Output expected: preText = '$(' number = '2000' postText = ')%'

Otro ejemplo: si data=$2,23,603 , la salida debería ser preText=$ , number=2,23,603 y postText= .

No puedo lograr esto con diferentes variables, ¿cómo puedo obtener el resultado deseado?

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

0

Puedes usar

 const data = '$(2000)%'; const regex = /^(.*?)((?:\d{1,3}(?:,\d{1,3})*|\d+)(?:\.\d{1,5})?)(\D.*)?$/; const [_, preText, number, postTex] = data.match(regex); console.log([preText, number, postTex]);

Detalles :

  • ^ - comienzo de la cadena
  • (.*?) - Grupo 1 ( preText ): cualquier cero o más caracteres que no sean caracteres de salto de línea, la menor cantidad posible
  • ((?:\d{1,3}(?:,\d{1,3})*|\d+)(?:\.\d{1,5})?) - Grupo 2 ( number ): de uno a tres dígitos seguidos de cero o más ocurrencias de una coma y de uno a tres dígitos, o solo uno o más dígitos, y luego una secuencia opcional de un . y de uno a cinco dígitos
  • (\D.*)? - Grupo 3 ( postTex ), opcional: un carácter que no sea un dígito y luego cero o más caracteres que no sean caracteres de salto de línea, tantos como sea posible
  • $ - final de la cadena.
about 4 years ago · Juan Pablo Isaza Report

0

Algunas notas sobre el patrón:

  • Primero probando su código, este es el mensaje de error:

Error de sintaxis no capturado: expresión regular no válida: /(([)?[0-9]{1,3}(?:,[0-9]{1,3})*(.[0-9]{1,5 })?()])?/: grupo no terminado

  • Aparte de eso, debe escapar dos veces de la barra invertida en el constructor RegExp
  • Entre paréntesis, hay 2000, que tiene 4 dígitos, y [0-9]{1,3} solo puede coincidir con 1-3 dígitos.
  • Un patrón como \(\[ solo coincidirá cuando ambos ([ estén presentes
  • El patrón no coincide con $ o % , por lo que no puede estar en la salida

Lo que podrías hacer es capturar todos los símbolos posibles en grupos a la izquierda y a la derecha usando una clase de carácter como [$\[(]

 ([$\[(]*)\b((?:[0-9]{1,3}(?:,[0-9]{1,3})*(?:\.[0-9]{1,5})?)|\d+)\b([\])%]*)

Demostración de expresiones regulares

O, opcionalmente, haga coincidir todos los \D* que no sean dígitos para que coincidan con los dígitos:

 (\D*)\b((?:[0-9]{1,3}(?:,[0-9]{1,3})*(?:\.[0-9]{1,5})?)|\d+)\b(\D*)

Demostración de expresiones regulares

Si hay una coincidencia, los números del grupo de captura son 1, 2 y 3:

 let data = '$(2000)%' const regex = /([$\[(]*)\b((?:[0-9]{1,3}(?:,[0-9]{1,3})*(?:\.[0-9]{1,5})?)|\d+)\b([\])%]*)/; const m = data.match(regex); console.log(m); if (m) { preText = m[1]; // etc.. }

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!