这个BASH正则表达式有什么问题

爱国者*_*爱国者 2 regex bash

$ reg='(\.js)|(\.txt)|(\.html)$'
$ [[ 'flight_query.jsp' =~ $reg ]]
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

*.jsp不应该基于正则表达式匹配,但实际上不匹配.

有什么建议?

cre*_*ama 8

删除了有用的评论.注释表明运算符优先级是正则表达式传递的原因.他建议将以下正则表达式作为修复.

$ reg='(\.js|\.txt|\.html)$'
$ if [[ 'flight_query.jsp' =~ $reg ]]; then echo 'matches'; else echo "doesn't match"; fi
doesn't match
$ if [[ 'flight_query.js' =~ $reg ]]; then echo 'matches'; else echo "doesn't match"; fi
matches
Run Code Online (Sandbox Code Playgroud)

这个正则表达式也可以(\.js$)|(\.txt$)|(\.html$).