使用此代码段,我试图确保文本字段不以$ scope.pointPattern中的任何字母结尾

$scope.pointPattern = /^(?!.*ess|ence|sports|riding?$)/;
            $scope.error = "not valid";


在运行代码时,仅当字段以ess结尾时才显示该错误,但其他字母从未被列入黑名单

e.g
football ess > shows error not valid
footbal ence > does not show error and likewise on sports and riding


我究竟做错了什么

最佳答案

您的^(?!.*ess|ence|sports|riding?$)正则表达式匹配的字符串不以ess结尾,也不以encesports开头,并且不以ridingridin结尾。请参见your regex demo。发生这种情况是因为未对备选方案进行分组并且仅$

您需要对这些备选方案进行分组。

采用

$scope.pointPattern = /^(?!.*(?:ess|ence|sports|riding?)$)/;
                             ^^^   ^    ^      ^       ^


(?!和最后一个)定义了负数lookahead的边界,并且(?:ess|ence|sports|riding?)non-capturing group,与其中列出的以|alternation operator)分隔的任何替代项匹配。

08-19 19:18