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

171
Vistas
Javascript: Regex para convertir una cadena de lista numerada en una matriz de elementos

Estoy tratando de convertir una lista numerada en una matriz de elementos. Esto es lo que tengo hasta ahora:

 let input = `1. This is a text\n where each item can span over multiple lines\n 1.1 this is another item\n 1.2another item\n 2. that I want to\n extract each seperate\n item from\n 3. How can I do that?`; let regex = /(\d+\.\d+|\d+)\s(.*)/g; let matches = input.match(regex); console.log(matches);

Esto solo produce el siguiente resultado:

 "1.1 this is another item"

Lo que me gustaría es algo como esto:

 "1. This is a text" "1.1 this is another item" "1.2another item" ...and so on

¿Por qué coincide solo con un elemento de esta cadena? ¿Qué estoy haciendo mal y cómo puedo solucionarlo?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Su expresión regular no prevé un punto después de un número cuando no hay un segundo número siguiéndolo. También requiere un espacio después del número, pero tiene un caso en el que no hay tal espacio. Así que hazlo opcional.

Además, use el s modificado para que . también coincide con la nueva línea cha

Si un elemento nuevo puede comenzar en la misma línea, necesitará mirar hacia adelante para prever dónde debe terminar una coincidencia.

Corrección:

 let input = `1. This is a text\n where each item can span over multiple lines\n 1.1 this is another item\n 1.2another item\n 2. that I want to\n extract each seperate\n item from\n 3. How can I do that?`; let regex = /(\d+\.\d*)\s?(.*?)(?=\d+\.|$)/gs; let matches = input.match(regex); console.log(matches);

about 4 years ago · Santiago Trujillo Denunciar

0

Otra opción usando una clase de carácter negado:

 \b\d+\.\D*(?:\d(?!\.)[^.]*)*

Explicación

  • \b\d+\.\ Un límite de palabra, coincide con 1+ dígitos y un punto
  • \D* Opcionalmente emparejar no dígitos
  • (?:\d(?!\.)[^.]*)* Opcionalmente, haga coincidir un dígito afirmando que no es un punto directamente a la derecha

Demostración de expresiones regulares

 let input = `1. This is a text\n where each item can span over multiple lines\n 1.1 this is another item\n 1.2another item\n 2. that I want to\n extract each seperate\n item from\n 3. How can I do that?`; let regex = /\b\d+\.\D*(?:\d(?!\.)[^.]*)*/g; let matches = input.match(regex); console.log(matches);

Si desea tener en cuenta el inicio de la cadena donde comienzan los dígitos y el punto, puede seguir la coincidencia afirmando que no hay un patrón de dígitos y puntos al comienzo de la cadena:

 ^[^\S\n]*\d+\..*(?:\n(?![^\S\n]*\d+\.).*)*

Demostración de expresiones regulares

 let input = "1. This is a text with a number 1.2 and 3.\n where each item can span over multiple lines\n 1.1 this is another item\n 1.2another item\n 2. that I want to\n extract each seperate\n item from\n 3. How can I do that?"; let regex = /^[^\S\n]*\d+\..*(?:\n(?![^\S\n]*\d+\.).*)*/gm; let matches = input.match(regex).map(s => s.trim()); console.log(matches);

about 4 years ago · Santiago Trujillo 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