То, что у вас есть, на самом деле является довольно хорошим способом сделать это, но вы должны добавить некоторую проверку, которая гарантирует, что match () на самом деле возвращает массив (то есть строка была найдена), а не ноль, иначе вы получите тип ошибка.
пример:
var index = $(":input:last").attr("name").match(/\[(\d+)\]/);
if (match) { index = match[1]; }
else { /* no match */ }