Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 与正则表达式一起使用时,无法读取属性长度null错误_Javascript_Regex_Null - Fatal编程技术网

Javascript 与正则表达式一起使用时,无法读取属性长度null错误

Javascript 与正则表达式一起使用时,无法读取属性长度null错误,javascript,regex,null,Javascript,Regex,Null,我是一个javascript初学者,正在做一些CodeWars.com问题。我遇到了这个问题,由于“无法读取属性长度null”错误而陷入困境。我试图查找该错误,但在我的程序中找不到问题所在 任务是: “检查字符串的'x'和'o'数量是否相同。该方法必须返回布尔值且不区分大小写。该字符串可以包含任何字符。” 这就是我到目前为止写的: function XO(str) { var x = "x"; var o = "o"; var numX = str.match(/x/gi

我是一个javascript初学者,正在做一些CodeWars.com问题。我遇到了这个问题,由于“无法读取属性长度null”错误而陷入困境。我试图查找该错误,但在我的程序中找不到问题所在

任务是:

“检查字符串的'x'和'o'数量是否相同。该方法必须返回布尔值且不区分大小写。该字符串可以包含任何字符。”

这就是我到目前为止写的:

function XO(str) {
    var x = "x";
    var o = "o";
    var numX = str.match(/x/gi).length;
    var numO = str.match(/o/gi).length;


    while(str.indexOf(x) > -1 || str.indexOf(o) > -1)  {
      if(numX == numO){
        return true;

      }
    }


     if (numX === -1 && numO === -1){
       return true;
    }

}

XO("xoxo");

作业还指出,如果既没有X也没有O,则程序应返回true。

这不会给出该错误。当没有匹配项时,match函数返回null,您无法获取null的长度。多出几行就解决了这个问题

函数XO(str){ var x=“x”; var o=“o”; var numX=0; var numO=0; var xMatch=str.match(/x/gi); var-oMatch=str.match(/o/gi); if(xMatch){ numX=xMatch.length; } 如果(oMatch){ numO=oMatch.length; } while(str.indexOf(x)>-1 | | str.indexOf(o)>-1){ 如果(numX==numO){ 返回true; }否则{ 返回false; } } 如果(numX==-1&&numO===-1){ 返回true; }否则{ 返回false; } }
console.log(XO(“ddd”)我认为您正在使这个问题变得更加复杂

您所需要做的就是将字符串设置为小写(不区分大小写),遍历字符串,当它找到一个x时,向计数器添加1,当找到和o时,从计数器中减少1。 如果它结束于0,则返回true,否则返回false。不需要正则表达式

function XO(str){
  var count = 0;
  str = str.toLowerCase();
  for(var i = 0; i < str.length; i++){
    if(str[i] === 'x') count++;
    if(str[i] === 'o') count--;
  }
  return count === 0 ? true : false;
}
函数XO(str){ var计数=0; str=str.toLowerCase(); 对于(变量i=0;i是,在检查长度属性之前,必须检查
匹配的返回值是否不为空。然而

while(str.indexOf(x) > -1 || str.indexOf(o) > -1)  {
  if(numX == numO){
    return true;

  }
}
如果字符串包含小写字母“x”或“o”,并且每个字符串的数目不同,则看起来像是一个无限循环

更简单地说:

function XO(str)
{  var matchX = str.match(/x/gi);
   var matchY = str.match(/o/gi);
   return (matchX && matchY) ? matchX.length == matchY.length : !matchX &&  !matchY;
}

match
可能返回
null
null。length
将抛出该错误。试试
(str.match(/x/gi)| |“”)。长度
为什么在
循环时有
?条件的值在循环体内部不会更改。如果
,则应该是