JavaScript · Avançado · Português · Técnico
backtracking catastrófico
Falha de desempenho em expressões regulares em que o motor testa um número exponencial de caminhos antes de rejeitar o texto. Repetições aninhadas, como (a+)+, são a causa típica.
Onde usar
Aparece em code review de validações com regex sobre entrada do usuário, onde pode virar ataque de negação de serviço, o ReDoS. Como o motor roda numa thread só, uma regex lenta trava o servidor inteiro.
Em código
const re = /^(a+)+$/;
const ruim = 'a'.repeat(25) + 'b';
console.time('regex');
re.test(ruim); // cada 'a' extra dobra o tempo
console.timeEnd('regex');Exemplos
Essa regex sofre backtracking catastrófico com texto longo.
Uma regex com repetição aninhada travou o servidor inteiro.
Cuidado
Validar entrada não confiável com regex de repetições aninhadas, sem limitar o tamanho do texto.
Sinônimos
ReDoS, catastrophic backtracking