Porque faltó el último apellido, prueba con este para validar el último apellido:
/([a-zñÑáéíóúÁÉÍÓÚ]+\s+((de\s+la|de)\s+)*[a-zñÑáéíóúÁÉÍÓÚ]+(\s+)*([a-zñÑáéíóúÁÉÍÓÚ]+)*)/i
Invertí las reglas, ahora la concatenación "de" y "de la" con opcionales y solo permite dos apellidos incluyendo uno concatenado aunque el último también es opcional.
function valida(){
var prueba = "/([a-zñÑáéíóúÁÉÍÓÚ]+\s+((de\s+la|de)\s+)*[a-zñÑáéíóúÁÉÍÓÚ]+(\s+)*([a-zñÑáéíóúÁÉÍÓÚ]+)*)/i";
var campo = document.getElementById("campo");
alert(campo.value);
if ((campo.value.match(prueba)) && (campo.value!='')) {
alert('expresion Correcta');
} else {
alert("nop");
campo.focus();
}
}
Pablo de videla torres -> Válido
pablo de la torre -> Válido
pablo de la torre guzman -> Válido
Pablo guzman -> Válido
pablo de la torre guzman abc def ghi -> inválido
Si quieres que la validación sea obligadamente apellidos concatenados entonces reemplaza ((de\s+la|de)\s+)* por ((de\s+la|de)\s+)+
Recuerda trabajar siempre con UTF-8 o si no tendrás que utilizar secuencia de escape para carácteres unicode en javascript o hexadecimales vy agregar múltiples condicionales para múltiples codificaciones, por eso mejor usa siempre utf-8 y no tendrás problemas con las validaciones en los acentos..