Dividir String: separador literal vs. regex, e o que acontece com separadores vazios
Dividir um texto por um separador (vírgula, ponto-e-vírgula, quebra de
linha, ou qualquer caractere escolhido) usa, por trás da interface
simples, o método String.prototype.split() do JavaScript
— mas esse método tem comportamentos de borda que vale entender antes
de usar em dados reais, especialmente ao processar CSV ou listas
coladas de outras fontes (planilhas, exports de sistema).
Separadores consecutivos produzem elementos vazios, não são ignorados
Dividir "a,,b" por vírgula produz
["a", "", "b"] — o elemento vazio entre as duas vírgulas
consecutivas é preservado, não descartado automaticamente. Isso é
frequentemente o comportamento correto (dois separadores seguidos
geralmente significam "um campo vazio" em dados tabulares, uma
distinção real que descartar silenciosamente perderia), mas surpreende
quem espera que split() "limpe" a entrada automaticamente.
Um separador de espaço em branco tratado como regex
(/\s+/, um ou mais espaços consecutivos) é diferente: aí
sim, múltiplos espaços seguidos colapsam num único ponto de divisão,
porque a expressão regular já engloba a sequência inteira como um
único separador — a diferença de comportamento entre separador literal
de um caractere e separador via regex é exatamente esse ponto.
Por que o separador de string literal é mais previsível que regex para o usuário
Quando o separador escolhido pelo usuário é um caractere literal
(vírgula, ponto-e-vírgula, um caractere qualquer digitado), tratá-lo
como string literal — não interpretá-lo como padrão de regex — evita
uma classe de bug de usabilidade: caracteres com significado especial
em regex (., *, +,
(, entre outros) se comportariam de forma inesperada se o
usuário digitasse, por exemplo, um ponto como separador esperando que
ele funcionasse literalmente, mas o motor de regex o interpretasse como
"qualquer caractere". Ferramentas que aceitam separador definido pelo
usuário precisam decidir explicitamente entre tratar a entrada como
string literal (mais previsível para a maioria dos casos) ou como
regex (mais poderoso, mas exige que o usuário entenda sintaxe de
regex).