Check your bash version. Starting from version 3.2 this behavior was added that states:
Quoting the string argument to the [[ command's =~ operator now forces
string matching, as with the other pattern-matching operators.
I guess you are using bash >= ver 3.2 for your test.
That's the reason when you quote the regular expression it is doing plain simple string matching instead of regex matching.
Update: If you want regex matching inside double quotes then use:
shopt -s compat31
As per the manual:
compat31
If set, bash changes its behavior to that of version 3.1
with respect to quoted arguments to the conditional command's =~ operator.
which causes your command to behave differently:
[[ "hello" =~ "he.*" ]] && echo YES || echo NO
YES
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…