x <- c("aasdfadsf cat asdfadsf dog", "asfdadsfads dog asdfasdfadsf cat")
sub(".*(?|(dog).*(cat)|(cat).*(dog)).*", "\\1 \\2", x, perl=TRUE)
##unlist(regmatches(x, gregexpr("dog(?=.*cat)|cat(?=.*dog)", x, perl=TRUE)))