Truncando el final de una cadena en R después de un carácter que puede estar presente cero o más veces

Tengo los siguientes datos:

temp<-c("AIR BAGS:FRONTAL" ,"SERVICE BRAKES HYDRAULIC:ANTILOCK",
    "PARKING BRAKE:CONVENTIONAL",
    "SEATS:FRONT ASSEMBLY:POWER ADJUST",
    "POWER TRAIN:AUTOMATIC TRANSMISSION",
    "SUSPENSION",
    "ENGINE AND ENGINE COOLING:ENGINE",
    "SERVICE BRAKES HYDRAULIC:ANTILOCK",
    "SUSPENSION:FRONT",
    "ENGINE AND ENGINE COOLING:ENGINE",
    "VISIBILITY:WINDSHIELD WIPER/WASHER:LINKAGES")

Me gustaría crear un nuevo vector que retenga solo el texto anterior al primer ":" en los casos en que ":" esté presente, y la palabra completa cuando ":" no esté presente.

He intentado usar:

temp=data.frame(matrix(unlist(str_split(temp,pattern=":",n=2)), 
+                        ncol=2, byrow=TRUE))

pero no funciona en los casos donde no hay ":"

Sé que esta pregunta es muy similar a:truncar cadena de un determinado carácter en R, que utiliza:

sub("^[^.]*", "", x)

Pero no estoy muy familiarizado con las expresiones regulares y he luchado para revertir ese ejemplo para conservar solo el principio de la cadena.

Respuestas a la pregunta(5)

Su respuesta a la pregunta