如果代码块未在真实条件下执行。 JS

时间:2019-06-29 08:02:22

标签: 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.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

1 个答案:

答案 0 :(得分:-1)

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

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