Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

169
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda