Try this base R work. You only "need" the first and last lines of this block, the rest are "building".
ptns <- data.frame(RACE=c("White", "Black"), ptn = c("(white|caucas)", "black"))
sapply(ptns$ptn, grepl, x = dat$TEST_CODE, ignore.case = TRUE)
#       (white|caucas) black
#  [1,]           TRUE FALSE
#  [2,]           TRUE FALSE
#  [3,]          FALSE  TRUE
#  [4,]          FALSE  TRUE
#  [5,]          FALSE FALSE
#  [6,]           TRUE FALSE
#  [7,]          FALSE  TRUE
#  [8,]           TRUE FALSE
#  [9,]          FALSE  TRUE
apply(sapply(ptns$ptn, grepl, x = dat$TEST_CODE, ignore.case = TRUE), 1, which.max)
# [1] 1 1 2 2 1 1 2 1 2
ptns$RACE[apply(sapply(ptns$ptn, grepl, x = dat$TEST_CODE, ignore.case = TRUE), 1, which.max)]
# [1] "White" "White" "Black" "Black" "White" "White" "Black" "White" "Black"
dat$RACE == ptns$RACE[apply(sapply(ptns$ptn, grepl, x = dat$TEST_CODE, ignore.case = TRUE), 1, which.max)]
# [1]  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
dat[dat$RACE == ptns$RACE[apply(sapply(ptns$ptn, grepl, x = dat$TEST_CODE, ignore.case = TRUE), 1, which.max)],]
#    ACCT TEST_DATE  TEST_CODE Value  RACE
# 1  1088  4/4/2016 GFR Caucas    58 White
# 2  1088  4/4/2016 GFR Caucas    58 White
# 7 44867  4/4/2016  GFR Black    27 Black
# 8  1564  4/4/2016 GFR Caucas    30 White
An alternative can be had using the fuzzyjoin package that joins based on regexes (and other methods):
library(fuzzyjoin)
# dat and ptns from above
regex_left_join(dat, ptns, by = c("TEST_CODE" = "ptn"), ignore_case = TRUE)
#    ACCT TEST_DATE  TEST_CODE Value RACE.x RACE.y            ptn
# 1  1088  4/4/2016 GFR Caucas    58  White  White (white|caucas)
# 2  1088  4/4/2016 GFR Caucas    58  White  White (white|caucas)
# 3  1088  4/4/2016  GFR Black    47  White  Black          black
# 4  1088  4/4/2016  GFR Black    47  White  Black          black
# 5 44867  4/4/2016        GFR    45  Black   <NA>           <NA>
# 6 44867  4/4/2016 GFR Caucas    33  Black  White (white|caucas)
# 7 44867  4/4/2016  GFR Black    27  Black  Black          black
# 8  1564  4/4/2016 GFR Caucas    30  White  White (white|caucas)
# 9  1564  4/4/2016  GFR Black    30  White  Black          black
subset(regex_left_join(dat, ptns, by = c("TEST_CODE" = "ptn"), ignore_case = TRUE),
       subset = RACE.x == RACE.y)
#    ACCT TEST_DATE  TEST_CODE Value RACE.x RACE.y            ptn
# 1  1088  4/4/2016 GFR Caucas    58  White  White (white|caucas)
# 2  1088  4/4/2016 GFR Caucas    58  White  White (white|caucas)
# 7 44867  4/4/2016  GFR Black    27  Black  Black          black
# 8  1564  4/4/2016 GFR Caucas    30  White  White (white|caucas)