These * should * not \*be\* selected. This* neither! *should be. This *neither should\* be* *this should* and*This*
These * should * not *be* selected. This* neither! *should be. This *neither should* be* <em>this should</em> ～～and<em>This</em>～～
You should be careful with a regex approach when parsing markdown with regex since your data can have escape sequences. That means, you cannot just use lookarounds to match something if it is not preceded with backslash. What you can try to do with regex is to match escape sequences coming before the markdown into one group and the markdown parts into another.
See this regex demo. Inside the code, you need to handle these 2 groups differently as per your specifications.
(?u)- make the word boundaries Unicode-aware in the pattern
(\\\\.)- Group 1 - an escape sequence
(\\*\\b(?:(?!\\\\[*]).)*?\\b\\*)- Group 2 matching
*that is followed with a word char
(?:(?!\\\\[*]).)*?- any char that is not a starting char of a
\*sequence, as few as possible
*that is preceded with a word char
Better option is a custom parsing code.