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

219
Views
¿Cómo puedo incluir el delimitador con regex String.split()?

Necesito analizar los tokens de una cadena de formato GS1 UDI:

 "(20)987111(240)A(10)ABC123(17)2022-04-01(21)888888888888888"

Me gustaría dividir esa cadena con una expresión regular en "(nnn)" y tener el delimitador incluido con los valores divididos, así:

 [ "(20)987111", "(240)A", "(10)ABC123", "(17)2022-04-01", "(21)888888888888888" ]

A continuación se muestra un JSFiddle con ejemplos, pero en caso de que quieras verlo aquí mismo:

 // This includes the delimiter match in the results, but I want the delimiter included WITH the value // after it, eg: ["(20)987111", ...] str = "(20)987111(240)A(10)ABC123(17)2022-04-01(21)888888888888888"; console.log(str.split(/(\(\d{2,}\))/).filter(Boolean)) // Result: ["(20)", "987111", "(240)", "A", "(10)", "ABC123", "(17)", "2022-04-01", "(21)", "888888888888888"] // If I include a pattern that should (I think) match the content following the delimiter I will // only get a single result that is the full string: str = "(20)987111(240)A(10)ABC123(17)2022-04-01(21)888888888888888"; console.log(str.split(/(\(\d{2,}\)\W+)/).filter(Boolean)) // Result: ["(20)987111(240)A(10)ABC123(17)2022-04-01(21)888888888888888"] // I think this is because I'm effectively mathching the entire string, hence a single result. // So now I'll try to match only up to the start of the next "(": str = "(20)987111(240)A(10)ABC123(17)2022-04-01(21)888888888888888"; console.log(str.split(/(\(\d{2,}\)(^\())/).filter(Boolean)) // Result: ["(20)987111(240)A(10)ABC123(17)2022-04-01(21)888888888888888"]

Encontré y leí esta pregunta , sin embargo, los ejemplos allí son literales coincidentes y estoy usando clases de caracteres y obteniendo resultados diferentes.

No puedo crear un patrón de expresiones regulares que proporcione lo que busco. Aquí hay un JSFiddle de algunas de las cosas que probé: https://jsfiddle.net/6bogpqLy/

No puedo garantizar el orden de los "identificadores de aplicación" en la cadena de entrada y, como tal, la coincidencia con capturas nombradas no es una opción atractiva.

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

0

Puede dividir en posiciones donde sigue el elemento entre paréntesis, utilizando una aserción anticipada de longitud cero:

 const text = "(20)987111(240)A(10)ABC123(17)2022-04-01(21)888888888888888" const parts = text.split(/(?=\(\d+\))/) console.log(parts)

about 4 years ago · Juan Pablo Isaza Report

0

En lugar de split , use la match para crear la matriz. Luego busque 1) dígitos entre paréntesis, seguidos de un grupo que pueda contener un dígito, una letra o un guión, y luego 2) agrupe toda la consulta.

(PD. A menudo encuentro que un sitio como Regex101 realmente ayuda cuando se trata de probar expresiones fuera de un entorno de desarrollo).

 const re = /(\(\d+\)[\d\-AZ]+)/g; const str = '(20)987111(240)A(10)ABC123(17)2022-04-01(21)888888888888888'; console.log(str.match(re));

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!