Регулярные выражения не инструмент, который умеет понимать корень слова. Как уже написали в комментариях, с числом букв споткнётесь о коллизию «думой» vs «думал» – первое надо капитализировать, второе нет.
Так что предложил бы засучить рукава и перечислить все словоформы явно. Но и это не гарантирует безошибочность: подставят переносы слова, или омонимы.
Омонимы сидели в баре, развалившись, как баре.
В помощь
учебник по регулярным выражениям.
Граница слова:
\b
— работает только для ASCII, не годится для Unicode кириллицы.
Unicode и флаг "u"
Вариант выражения
/дум.?(?=$|\s)/u
– один опциональный символ, и смотреть вперёд, чтобы там был или конец строки или пробельный символ.
const m = str => str.match(/дум.?(?=$|\s)/u);
m('ду') // null
m('дум') // ["дум"]
m('дума') // ["дума"]
m('думать') // null
Вам нужно ещё разобраться и самостоятельно сделать такую же проверку до искомой строки: чтобы там было начало строки ^ или пробельный символ.