Connect Four Validator
Retina, 51 48 bytes
Thanks to Martin Ender for saving 3 bytes
M`X((.{6}X){3}|(.{8}X){3}|(.{7}X){3}|XXX)
T`d`YX
Try it Online!
Takes input as a comma-separated list of rows
JavaScript (ES6), 77 76 69 bytes
Saved 7 bytes thanks to Neil
Takes input as a something-separated string, where something is basically any character.
b=>[...'XXXXYYYY'].find((c,i)=>b.match(`(${c}.{${(i%4+6)%9}}){3}`+c))
Test cases
let f =
b=>[...'XXXXYYYY'].find((c,i)=>b.match(`(${c}.{${(i%4+6)%9}}){3}`+c))
console.log(f("OOOOOOO,OOOOOOO,OOOOOOO,OOOOOOO,OOYYOOO,OYXXXXO"))
console.log(f("OOOOOOO,OOOOOOO,OOOOOOO,XXXXOOO,YXYYOOO,YXYYXYX"))
console.log(f("YXYYXOO,XYXXYOO,XXXYYOO,YYYXXOO,XXYYYYO,XXYYXXO"))
Javascript (ES6), 54 55
Edit 1 byte saved thanks @Arnauld
I just check if X is the winner, as There will always be one winner, and only one winner
Input is a string with any separator, like in @Arnauld's answer
F=
b=>'YX'[+[0,6,7,8].some(x=>b.match(`X(.{${x}}X){3}`))]
;['OOOOOOO OOOOOOO OOXOOOO OOXOOOO OOXOOOO OOXOYYY'
,'OOOOOOO OOOOOOO OOXOOOO OOYXOOO OOYOXOO OOYYOXY'
,'OOOOOOO,OOOOOOO,OOOOOOO,OOOOOOO,OOYYOOO,OYXXXXO'
,'OOOOOOO,OOOOOOO,OOOOOOO,XXXXOOO,YXYYOOO,YXYYXYX'
,'YXYYXOO,XYXXYOO,XXXYYOO,YYYXXOO,XXYYYYO,XXYYXXO']
.forEach(s => console.log(s,F(s)))