Obcinanie końca łańcucha w R po znaku, który może być obecny zero lub więcej razy

Mam następujące dane:

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")

Chciałbym stworzyć nowy wektor, który zachowuje tylko tekst przed pierwszym „:” w przypadkach, gdy występuje „:”, a całe słowo, gdy „:” nie jest obecne.

Próbowałem użyć:

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

ale nie działa w przypadkach, w których nie ma „:”

Wiem, że to pytanie jest bardzo podobne do:obetnij ciąg od pewnego znaku w R, który używał:

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

Ale nie jestem zbyt dobrze zaznajomiony z wyrażeniami regularnymi i usiłowałem odwrócić ten przykład, aby zachować tylko początek ciągu.