Javascript 如果块未在truthy条件下执行。JS

Javascript 如果块未在truthy条件下执行。JS,javascript,regex,string,Javascript,Regex,String,我在JS中偶然发现了意想不到的行为。如果我记录regexpr.test(inp),控制台输出true,但如果此代码用作条件“If block”console.log('in If')未执行 如果我将此代码分配给一个变量,然后将其用作“If block”按预期执行的条件 在chrome控制台和节点上进行了测试 var str = '()' function validateInput (inp) { let regexpr = /^(?:\(|\)|\s)+$/gim console.

我在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));


您正在从头到尾匹配字符串-根本不需要使用
g
(全局)标志

let regexpr = /^(?:\(|\)|\s)+$/im;

除非实际需要全局标志,否则不要使用全局标志
let regexpr = /^(?:\(|\)|\s)+$/im;