Javascript 与正则表达式一起使用时,无法读取属性长度null错误
我是一个javascript初学者,正在做一些CodeWars.com问题。我遇到了这个问题,由于“无法读取属性长度null”错误而陷入困境。我试图查找该错误,但在我的程序中找不到问题所在 任务是: “检查字符串的'x'和'o'数量是否相同。该方法必须返回布尔值且不区分大小写。该字符串可以包含任何字符。” 这就是我到目前为止写的: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
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)| |“”)。长度为什么在循环时有?条件的值在循环体内部不会更改。如果
,则应该是。