首页 > 解决方案 > 如果块没有在真实条件下执行。JS

问题描述

我偶然发现了 JS 中的意外行为。如果我登录regexpr.test(inp),控制台输出true,但如果此代码用作条件“如果块”console.log('in if');未执行。

如果我将此代码分配给一个变量,然后将其用作条件“如果块”按预期执行。

在 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

标签: javascriptregexstring

解决方案


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

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

推荐阅读