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

350
Visualizações
Javascript/RegEx: divide una cadena por comas pero ignora las comas entre comillas dobles

Sé que hay preguntas similares disponibles, pero no pude encontrar este caso.

CASO 1: 'a,b,c,d,e'

SALIDA: ["a", "b", "c", "d", "e"]

CASO 2: 'a,b,"c,d", e'

SALIDA: ["a", "b", "c,d", "e"]

CASO 3: 'a,,"c,d", e'

SALIDA: ["a", "", "c,d", "e"]

RegEx que probé: (".*?"|[^",]+)(?=\s*,|\s*$)

Enlace RegEx: https://regex101.com/r/xImG4i/1

Esta expresión regular funciona bien con CASE1 y CASE2 pero está fallando para CASE3. En cambio, funciona para

'a, ,"c,d", e' , dando salida como ["a", " ", "c,d", "e"]

que también está bien, pero también debe funcionar para CASE3.

¡Gracias por adelantado!

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Puede tomar caracteres de espacio en blanco opcionales entre 2 comas si se admite una búsqueda posterior.

 "[^"]*"|[^\s,'"]+(?:\s+[^\s,'"]+)*|(?<=,)\s*(?=,)

Demostración de expresiones regulares

 const regex = /"[^"]*"|[^\s,'"]+(?:\s+[^\s,'"]+)*|(?<=,)\s*(?=,)/g; [ `'a,b,c,d,e'`, `'a,b,"c,d", e'`, `'a,,"c,d", e'`, ` xz a,, b, c, "d, e, f", g, h`, `'a, ,"c,d", e'`, ].forEach(s => console.log(s.match(regex)) )

Si no desea las comillas dobles, puede usar un grupo de captura con matchAll y buscar el grupo en la devolución de llamada.

 const regex = /"([^"]*)"|[^\s,'"]+(?:\s+[^\s,'"]+)*|(?<=,)\s*(?=,)/g; [ `'a,b,c,d,e'`, `'a,b,"c,d", e'`, `'a,,"c,d", e'`, ` xz a,, b, c, "d, e, f", g, h`, `'a, ,"c,d", e'`, ].forEach(s => console.log(Array.from(s.matchAll(regex), m => m[1] ? m[1] : m[0])) )

about 4 years ago · Santiago Trujillo Relatório

0

Una solución alternativa que usa una expresión regular para dividir en lugar de hacer coincidir:

 /,\s*(?=(?:(?:[^"]*"){2})*[^"]*$)/

Esta expresión regular se dividirá en comas seguidas de espacios opcionales si están fuera de las comillas dobles utilizando una búsqueda anticipada para asegurarse de que haya un número par de comillas después de la coma+espacio.

Demostración RegEx

Ejemplo de código:

 const re = /,\s*(?=(?:(?:[^"]*"){2})*[^"]*$)/; [ `a,b,"c,d", e`, `a,,"c,d", e`, ` xz a,, b, c, "d, e, f", g, h`, `a, ,"c,d", e`, ].forEach(s => { tok = s.split(re); tok.forEach((e, i) => tok[i] = e.replace(/^"|"$/g, '')) console.log(s, '::', tok); })

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