JavaScript substring: extraia texto por índice

O método substring do JavaScript extrai caracteres entre duas posições de índice e retorna uma nova string. Ele aceita um índice inicial e um índice final opcional (exclusivo), pegando tudo do início até antes do fim. Quando o índice final é omitido, a extração continua até o fim da string. Diferente de slice, substring troca os argumentos automaticamente quando o início é maior que o fim, evitando resultados vazios acidentais.

Exemplo de JavaScript Substring para extração de texto

Saída:

A saída aparecerá aqui...

Saída:

Nome: relatorio-2024
Extensão: csv

Como este exemplo funciona

  1. nomeArquivo.lastIndexOf(".") retorna 14, a posição do último ponto na string.
  2. nomeArquivo.substring(0, 14) extrai caracteres do índice 0 até (sem incluir) o índice 14, produzindo "relatorio-2024".
  3. nomeArquivo.substring(15) omite o argumento final, então a extração vai do índice 15 até o fim da string, retornando "csv".
  4. As duas chamadas retornam novas strings; o nomeArquivo original nunca é modificado porque strings em JavaScript são imutáveis.

Erros comuns com JavaScript substring

Esperar que índices negativos contem a partir do fim.

Errado:

"hello".substring(-3); // "hello", não "llo"

Certo:

"hello".slice(-3); // "llo"

substring ajusta valores negativos para 0, então substring(-3) vira substring(0) e retorna a string inteira. Use slice para deslocamentos relativos ao fim.

Tratar o segundo argumento como comprimento.

Errado:

"abcdef".substring(2, 3); // "c", não "cde"

Certo:

"abcdef".substring(2, 5); // "cde"

O segundo parâmetro é um índice final, não uma contagem de caracteres. Essa confusão costuma vir do substr(start, length) legado, em que "abcdef".substr(2, 3) retorna "cde". Ao migrar de substr, converta o comprimento para índice final: start + length.

JavaScript substring vs slice

Comportamentosubstring(start, end)slice(start, end)
Argumentos negativosAjustados para 0Contam a partir do fim da string
start > endTrocados automaticamenteRetorna string vazia ""
Índice fora do intervaloAjustado para string.lengthAjustado para string.length
Modifica o originalNãoNão

Use substring quando os índices vêm de cálculos que podem chegar na ordem errada; a troca automática garante um resultado válido. Use slice quando deslocamentos negativos forem intencionais, como extrair os últimos N caracteres com str.slice(-N).

Substituindo substr legado por substring

O método legado substr(start, length) (muitas vezes chamado de JavaScript substr) ainda aparece em código antigo e está obsoleto na documentação. A confusão entre JavaScript substr e substring geralmente vem do significado diferente do segundo argumento: substr recebe comprimento, enquanto substring recebe índice final. Para migrar com segurança:

  1. Substitua str.substr(start, length) por str.substring(start, start + length).
  2. Se start puder ser negativo, use slice(start, start + length) no lugar, porque substring ajusta negativos para 0.
  3. Teste casos de borda em que length é 0, negativo ou omitido, já que substr e substring divergem nessas entradas.

FAQ

Qual é a diferença entre JavaScript substring e slice?

Ambos extraem parte de uma string por índice, mas divergem em casos de borda. substring ajusta argumentos negativos para 0 e troca início/fim quando o início é maior. slice trata negativos como deslocamentos a partir do fim e retorna string vazia quando o início é maior que o fim. Para extração direta por índices positivos, os dois produzem o mesmo resultado.

JavaScript substring modifica a string original?

Não. Strings em JavaScript são imutáveis; todo método de string retorna uma nova string. A original permanece inalterada após qualquer chamada de substring. Atribua o resultado a uma variável para manter o trecho extraído.

O que acontece quando start é maior que end em substring?

substring troca os dois argumentos silenciosamente. "abcdef".substring(4, 1) se comporta como "abcdef".substring(1, 4) e retorna "bcd". Essa normalização evita surpresas com string vazia quando cálculos de índice produzem limites invertidos.