繁体   English   中英

如何检查字符串中某些字符的存在和数量(例如'x'/'X'和'o'/'O')?

[英]How to check existence and amount of certain characters within a string (e.g. 'x'/'X' and 'o'/'O')?

我参加了代码大战(基础知识),有一个套路要求我制作一个程序,让您查看'x''o'数量是否相同(例如'xXXooO'应该返回true'xXxxO'应该返回false )。

使用我对编码的最佳知识(一点点)我构建了这段代码,但它不起作用。

function XO(str) {
  let string = str;
  const o = string.match(/O/g) + string.match(/o/g);
  const x = string.match(/X/g) + string.match(/x/g);
  if (o.length != x.length) {
    return true;
  } else {
    return false;
  }
}

请告诉我我的代码有什么问题。

这部分是我更新后的。

我更新了我的代码,但它说 null 不是 object。我也更新了变量,但我认为这不是原因。

function XO(str) {
  let string = str;
  const largeO = string.match(/O/g);
  const smallO = string.match(/o/g);
  const largeX = string.match(/X/g);
  const smallX = string.match(/x/g);
  const oCombined = largeO.length + smallO.length;
  const xCombined = largeX.length + smallX.length;
  if (oCombined = xCombined) {
    return true;
  } else {
    return false;
  }
}
console.log(XO("OxX"));

对于'x' / 'X''o' / 'O'不区分大小写的匹配,需要使用正则表达式i修饰符(或标志)。

并且需要处理失败match方法的null返回值,下一个提供的示例代码由可选链接 / ?. Nullish 合并运算符 / ?? .

 function isXAndOWithSameAmount(value) { // always assure a string type value = String(value); // in case of a `null` value... ...count is -1. const xCount = value.match(/x/gi)?.length?? -1; // in case of a `null` value... ...count is -2. const oCount = value.match(/o/gi)?.length?? -2; // thus the return value for neither an 'x'/`X` // match nor an 'o'/`O` match will always be `false`. return (xCount === oCount); // in order to achieve another (wanted/requested) // behavior one needs to change both values after // the nullish coalescing operator accordingly. } console.log( "isXAndOWithSameAmount('xXXooO')..?", isXAndOWithSameAmount('xXXooO') ); console.log( "isXAndOWithSameAmount('xXoXooOx')..?", isXAndOWithSameAmount('xXoXooOx') ); console.log( "isXAndOWithSameAmount('xXxxO')..?", isXAndOWithSameAmount('xXxxO') ); console.log( "isXAndOWithSameAmount('xOoXxxO')..?", isXAndOWithSameAmount('xOoXxxO') ); console.log( "isXAndOWithSameAmount('')..?", isXAndOWithSameAmount('') ); console.log( "isXAndOWithSameAmount('bar')..?", isXAndOWithSameAmount('bar') );
 .as-console-wrapper { min-height: 100%;important: top; 0; }

其中一个原因可以通过将match结果和可选链接的?.length通过parseInt转换为 integer 值来实现相同的行为,这将返回一个大于零的(整数)数值或NaN

 function isXAndOWithSameAmount(value) { // always assure a string type value = String(value); // making use of optional chaining and `parseInt` // which will result in (integer) number values // grater than zero or the `NaN` value. const xCount = parseInt(value.match(/x/gi)?.length); const oCount = parseInt(value.match(/o/gi)?.length); // since a `NaN` value is not equal to itself // the return value for neither an 'x'/`X` match // nor an 'o'/`O` match will always be `false`. return (xCount === oCount); } console.log( "isXAndOWithSameAmount('xXXooO')..?", isXAndOWithSameAmount('xXXooO') ); console.log( "isXAndOWithSameAmount('xXoXooOx')..?", isXAndOWithSameAmount('xXoXooOx') ); console.log( "isXAndOWithSameAmount('xXxxO')..?", isXAndOWithSameAmount('xXxxO') ); console.log( "isXAndOWithSameAmount('xOoXxxO')..?", isXAndOWithSameAmount('xOoXxxO') ); console.log( "isXAndOWithSameAmount('')..?", isXAndOWithSameAmount('') ); console.log( "isXAndOWithSameAmount('bar')..?", isXAndOWithSameAmount('bar') );
 .as-console-wrapper { min-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM