JavaScript RegExp [^ ...]表达式未给出预期结果

时间:2016-09-08 03:56:17

标签: javascript regex pattern-matching

以下是我的代码:

function isValid(passCode){
   var myRegExp=/[^a-z\d]/i;
   return !(myRegExp.test(passCode));
}

if (isValid(prompt("Enter passcode:",""))){
   alert("Access granted");
}else{
   alert("Denied");
}

根据我的理解,如果我将abc作为参数传递给isValid()函数,myRegExp.test应该返回true,因此{{1}应该返回isValid()(因为使用了false运算符)。 但该函数返回!。为什么呢?

这是JSFiddle:https://jsfiddle.net/k7d4va5k/#&togetherjs=GCP5bmgPP4

1 个答案:

答案 0 :(得分:1)

使用"字符类",也称为"字符集",您可以告诉正则表达式引擎只匹配多个字符中的一个。只需将要匹配的字符放在方括号中即可。

/[a-z\d]/ 

此waill匹配字母和数字

在左方括号之后键入插入符号(^)会否定字符类。结果是字符类匹配任何不在字符类中的字符。因此

/[^a-z\d]/.test('abc') will be false

/^[a-z\d]/.test('abc') will be true

因为在后一种情况下,插入符号表示一行的开头,这意味着如果在字符类之外使用插入符号,则它表示行的开头而不是否定字符类。