Javascript 易编码红细胞挑战计数x';s和o';s
我是JavaScript新手,不知道为什么我的代码不能工作。如果x和o的数量相等,我试图返回true,如果没有,则返回false。我的代码适用于除“x”和“o”之外的所有输入。感谢您的帮助 我的代码: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 {
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”的输入返回“不相同”。