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

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

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 Denunciar

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