我偶然发现了JS中的意外行为。如果我登录regexpr.test(inp)
,控制台将输出true
,但是如果将此代码用作条件'if block'console.log('in if');
,则不会执行。
如果我将此代码分配给变量,然后将其用作条件,则“ if block”将按预期执行。
在chrome控制台和节点中对其进行了测试。
var str = '()'
function validateInput (inp) {
let regexpr = /^(?:\(|\)|\s)+$/gim
console.log(regexpr.test(inp)); // logs true
if (regexpr.test(inp)) { // staments in if are not executed
console.log('in if');
}
console.log('after if');
return false
}
function validateInput2 (inp) {
let regexpr = /^(?:\(|\)|\s)+$/gim
let t1 = regexpr.test(inp);
console.log(t1); // logs true
if (t1) { // staments in if are executed
console.log('in if');
}
console.log('after if');
return false
}
console.log(validateInput(str));
console.log('------')
console.log(validateInput2(str));
true
after if
false
------
true
in if
after if
false
答案 0 :(得分:-1)
您要从头到尾匹配字符串-根本不需要使用g
(全局)标志。
let regexpr = /^(?:\(|\)|\s)+$/im;