Shortest simple regex matching a binary word
JavaScript (ES6), 488 341 bytes

s=&gt;[s.replace(/(.)\1+/g,'$1+'),...[...Array(60)].map((_,i)=&gt;`(${(i+4).toString(2).slice(1)})+`),...[...Array(1536)].map((_,i)=&gt;`${i&gt;&gt;10?(i&gt;&gt;8&amp;1)+(i&amp;2?'+':''):''}(${i&amp;1}${i&amp;4?i&gt;&gt;4&amp;1:i&amp;16?'+':''}${i&amp;8?''+(i&gt;&gt;7&amp;1)+(i&amp;64?i&gt;&gt;5&amp;1:i&amp;32?'+':''):''})+${i&amp;512?(i&gt;&gt;8&amp;1)+(i&amp;2?'+':''):''}`)].filter(r=&gt;s.match(`^${r}$`)).sort((a,b)=&gt;a.length-b.length)[0]


Explanation: Since six regexes can express all possible binary words, and the longest two are nine characters long, it suffices to check those and all shorter regexes. One candidate is obviously the string with "run length encoding" (i.e. all digit runs replaced with appropriate +s), but also strings with one set of ()s need to be checked. I generate 1596 such regexes (this includes duplicates and useless regexes but they'll just be eliminated) and test all 1597 to see which is the shortest match. The generated regexes fall into two types: \(\d{2,5}\)\+ (60 regexes) and (\d\+?)?\(\d[\d+]?(\d[\d+]?)?\)(\d\+?)? (1536 regexes as I avoid generating regexes with both leading and trailing digit).