The core of this formula is the IF function, which "filters" the names in the table by color like this:
The logical test checks each cell in the named range "group" for the color value in E5 (red in this case). The result is an array like this:
That result is used in turn to filter names from the named range "name":
For each TRUE, the name survives, for each FALSE, IF returns an empty string ("").
The result of IF looks is this array:
which goes into the TEXTJOIN function as text1.
TEXTJOIN is configured to use a comma as the delimiter, and to ignore empty values. The final result is this text string:
"Jude, Aya, George"
Line break instead of comma
To join matches with a line break instead of a comma, you can adjust the formula like this:
You can't use the AND or OR functions in an array formula like this because they only return a single result. You can use boolean logic like this for AND: