Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 易编码红细胞挑战计数x';s和o';s_Javascript_Regex - Fatal编程技术网

Javascript 易编码红细胞挑战计数x';s和o';s

Javascript 易编码红细胞挑战计数x';s和o';s,javascript,regex,Javascript,Regex,我是JavaScript新手,不知道为什么我的代码不能工作。如果x和o的数量相等,我试图返回true,如果没有,则返回false。我的代码适用于除“x”和“o”之外的所有输入。感谢您的帮助 我的代码: function ExOh(str) { var x = str.match(/[^x$]/gi); var o = str.match(/[^o$]/gi); if (x.length == o.length) { return true; } else {

我是JavaScript新手,不知道为什么我的代码不能工作。如果x和o的数量相等,我试图返回true,如果没有,则返回false。我的代码适用于除“x”和“o”之外的所有输入。感谢您的帮助

我的代码:

function ExOh(str) { 
 var x = str.match(/[^x$]/gi);
  var o = str.match(/[^o$]/gi);
  if (x.length == o.length) {
    return true;
  }
  else {
    return false;
  }
}

从正则表达式中删除
^
$
[^o$]
匹配单个字符,而不是
o
$
。您只需要使用
/x/
/o/
和标志
ig
i
忽略大小写,而
g
用于全局匹配

在开始的方括号后键入插入符号将否定字符类。结果是character类与character类之外的任何字符匹配。与点不同,求反字符类也匹配(不可见)换行字符。如果不希望求反字符类与换行符匹配,则需要在类中包含换行符。[^0-9\r\n]匹配任何不是数字或换行符的字符。(摘自)

更新:添加
(!x&&o)
x&&o
,以避免零匹配时出现错误
(!x&&!o)
用于两者均不存在的情况。
x&&o
仅在定义了
x
o
时,才有助于检查条件
x.length==o.length

var div=document.getElementById('res');
功能外显子(str){
var x=str.match(/x/gi);
var o=str.match(/o/gi);
如果(!x&&!o)| x&&o&&x.length==o.length){
res.innerHTML='相同';
返回true;
}否则{
res.innerHTML='不一样';
返回false;
}
}

您的regexp允许除
x
/
y
$
之外的任何字符。你一定是指
/x/gi
/o/gi

函数ExOh(str){
var x=str.match(/x/gi)| |“”;
var o=str.match(/o/gi)| |“”;
如果(x.length==o.length){
返回true;
}
否则{
返回false;
}
}
警报(ExOh(“zzz”));

警报(ExOh(“oozzzxx”)
如果
str.match
实际上不匹配,则需要将值设置为除
null
以外的其他值。不能在
null
上调用length。使用
运算符在变量声明中将值设置为空字符串

function ExOh(str) { 
 var x = str.match(/[^x$]/gi) || '';
 var o = str.match(/[^o$]/gi) || '';
 if (x.length == o.length) {
    return true;
 }
 else {
   return false;
 }
}

我希望这有助于检查两个字符的数量是否相同

// How many 'x' characters occur in a string?
function numberOf(str, x) {
  var matches = str.match(new RegExp(x, 'g'));
  return matches ? matches.length : 0;
}

// Create a function to check if the number of x's and o's in 
// a string are the same.
function same(x, o) {
  return function(str) {
    return numberOf(str, x) === numberOf(str, o);
  };
}

var isSame = same('x', 'o');
isSame('xxooabc');

如果只传递一个“x”或“o”,则仍会引发错误。str.match在调用
null
值上的
length
时返回
null
和条件中断。我很好奇为什么您不将此更正为
return x.length==o.length。另外,我想你想要的是
| |[]
,而不是
| | |“
。我实施了这些改变。当然,
==
还将检查类型和值,最好检查
匹配结果是否为空。实际上,
[]
产生了相同的结果。哇,这些都非常有用。显然,关于regexps,我还有很多东西要学@USER 5369036:请考虑接受,如果答案为您工作(见)。或者请不要犹豫,要求更多的澄清。顺便说一句,您甚至可以使用字符类来匹配
x
x
/[xX]/
。但是,
/i
修饰符完全是为不区分大小写的搜索而设计的,应该尽可能使用。这并不能解决基本问题,即
^
位于错误的位置。你测试过吗?从OP的问题来看,当其中一个值不匹配时,它会上升。是的,我在控制台中进行了测试。这将无法匹配零
o
和零
x
,这可能会返回
true
的值。当答案应为“相同”时,“abc”的输入返回“不相同”。