I would use a bit modified @PS.'s solution:
grep -oP '^(.*/)?\K.*?(?=:|\z)'
Test for some different inputs:
(echo "INPUT=RESULT"
while read -r from
do
    base=$(grep -oP '^(.*/)?\K.*?(?=:|\z)' <<<"$from")
    echo "$from=${base:-UNDEFINED}"
done <<'EOF') | column -s= -t
/aaa/bb:bb/fff:xx
/fff:xx
/fff:
/fff
/:xx
/
./aaa/bb:bb/fff:xx
./fff:xx
./fff:
./fff
./:xx
./
aaa/bb:bb/fff:xx
fff:xx
fff:
fff
:xx
EOF
prints
INPUT               RESULT
/aaa/bb:bb/fff:xx   fff
/fff:xx             fff
/fff:               fff
/fff                fff
/:xx                UNDEFINED
/                   UNDEFINED
./aaa/bb:bb/fff:xx  fff
./fff:xx            fff
./fff:              fff
./fff               fff
./:xx               UNDEFINED
./                  UNDEFINED
aaa/bb:bb/fff:xx    fff
fff:xx              fff
fff:                fff
fff                 fff
:xx                 UNDEFINED