我将用代码片段进行说明。
const regex = /^[0-9]{4}(-[0-9]{2}){2}(T[0-9]{2}(:[0-9]{2}){2})?$/gm;
// Matches dates of type yyyy-mm-dd and yyyy-mm-ddThh:mm:ss
const date_param = "2019-01-01";
console.log("Value of regex test", regex.test(date_param));
if(!regex.test(date_param))
console.log("! no parenthesis");
console.log("Value of regex test", regex.test(date_param));
if(!(regex.test(date_param)))
console.log("! with parenthesis");
let result = regex.test(date_param);
console.log("Result regex test in variable: ", result);
if(!result)
console.log("! with the result in a variable. Not seen. But Why?");
有三个独立的代码块,当 regex 返回保存在变量中时,前两个给出不同的结果,而对于我自己来说,我无法找出原因。
代码的前两部分:
console.log(regex.test(date_param));
if(!regex.test(date_param))
console.log("! no parenthesis");
console.log(regex.test(date_param));
if(!(regex.test(date_param)))
console.log("! with parenthesis");
为什么,如果 regex.test 返回一个布尔值值,则逻辑运算符!无效。来自文档:
如果正则表达式与指定的字符串匹配,则为true;否则为false。否则为假。
逻辑NOT(!)!expr如果可以将单个操作数转换为true,则返回false;否则,返回false。否则,返回true。
但是,如果您运行代码段并从 regex.test 获得 true ,则逻辑运算符不会切换为false,并且我不明白为什么。
Value of regex test true
! no parenthesis /*this was inside an if with !regex.test, if should have valued to false and not entered */
Value of regex test true
! with parenthesis /* Same thing */
请放心,如果我将 regex.test 值保存在变量中,那么使用!
时,它会达到预期的结果老实说,我不知道如何解释原因。有人可以帮忙吗?