使用没有正则表达式的循环在字符串上匹配模式

matching pattern on the string using loop without regex

我想使用 for 循环匹配字符串上的模式,我创建了这样的代码:

function partialCheck(str, partial) {
  
  var pattern = [];
  for (var i =0; i <= str.length; i++){
    if(partial === str[i]+str[i+1]+str[i+2]){
      pattern.push(partial);
    }
  }
  return pattern;
}

在测试用例上,它应该显示这样的结果:

console.log(partialCheck('abcdcabdabc', 'abc')); // ["abc","abc"]

console.log(partialCheck('accHghebchg', 'chg')); // ["cHg","chg"]

但是在第二种情况下,结果是这样的:

console.log(partialCheck('accHghebchg', 'chg')); // ["chg"]

问题是可以在不使用正则表达式的情况下忽略大小写将 cHg 放入数组吗?

先谢谢了。

比较前转换为小写。

您也可以使用 substr() 而不是连接字符串的特定索引。这允许您使用任何尺寸 partial.

并且您应该将子字符串推入结果数组,而不是 partial,以便您从字符串中获取大小写。

function partialCheck(str, partial) {
  var pattern = [];
  partial = partial.toLowerCase();
  for (var i = 0; i <= str.length - partial.length; i++) {
    if (partial === str.substr(i, partial.length).toLowerCase()) {
      pattern.push(str.substr(i, partial.length));
    }
  }
  return pattern;
}

console.log(partialCheck('accHghebchg', 'chg'));

是的,您可以使用 substring 使代码更简单:

function partialCheck(str, partial) {

  var pattern = [];
  partial = partial.toLowerCase();
  for (var i =0; i <= str.length; i++){
    var substr = str.substring(i, i + 3);
    if(partial === substr.toLowerCase()){
      pattern.push(substr);
    }
  }
  return pattern;
}