If you want to match these examples, plus assuming quite a lot about what you want, this will match any white-space separated list of words, which allows brackets around words.
/^((^|[^^\d\W]\s|[^^]\]\s)(\[(?=[a-z]+\]))?[a-z]+\]?(\s(?=[a-z]))?)+$/i
Don't forget to trim your input 😉 Note: It has some flaws: Currently, JS does not support positive look-behinds and named capturing groups (or alternatively recursing groups), so it unfortunately also matches "[test] abc]" and might glitch in edge-cases.
You can go to Regex101 and run the unit tests I set up or test any string in the test area to see if everything is all right.