检查字符串javascript中是否存在重复的字符序列

Check if duplicates of character sequence exists in a string - javascript

本文关键字:字符 存在 字符串 javascript 是否 检查      更新时间:2023-09-26

我想知道字符串数组的任何元素是否在给定的字符串中重复,比如:
var myArray = ["AB", "CD"];
var givenString = "ABCDAB";
这里,myArray的第一个元素在给定的字符串中重复。我想知道(真/假(字符串中是否发生了这种情况。如果任何一个元素出现多次,则应为true。尝试使用new RegExp(myArray[0]).test(givenString),但它只测试匹配,而不测试重复
我该怎么做?如果我不用使用旗帜,我会很高兴的。

您可以使用的地图和索引

var s = "ABCDAB";
var check = ["AB", "CD"].map(function(e) { 
     return s.indexOf(e, s.indexOf(e) + 1) !== -1;
});
console.log(check.indexOf(true) !== -1);

发生了什么-map函数将每个数组元素传递给该函数。每个数组元素然后返回这个

s.indexOf(e, s.indexOf(e) + 1) !== -1

内部s.indexOf(e)在我们的主字符串中找到元素的位置,并向其添加1(让我们称之为x(。外部s.indexOf(然后搜索我们元素的一个实例,但它从位置x开始搜索,因此它有效地搜索了我们元素的第二个实例(indexOf的第二参数指示从哪个位置开始向前搜索(。

如果有第二个实例,我们得到(元素的第二个例子的(位置,否则我们得到-1,这实际上是我们的检查。如果找不到字符串的实例,则第一个indexOf返回-1(这相当于传递0(,第二个实例也返回-1(如果没有1个实例,则不可能有2个实例:-((

在这个映射函数的末尾,我们得到了一个布尔值数组,指示每个元素在s中是否出现两次。最后一行

check.indexOf(true) !== -1

基本上检查这个数组是否包含true,即是否有任何元素出现两次,然后得到结果。

checkDup(givenString, myArray) {
  return myArray.some(function(str) {
    if (givenString.indexOf(str) =! givenString.lastIndexOf(str)) {
      return true;
    }
    return false;
  })
}  

Regex应该永远是最后的手段。

如果您在请求值上split()您的字符串,并且该值重复,则必须至少有3个部分。

function checkDuplicate(arr, str){
  for(var i=0; i< arr.length; i++){
    if(str.split(arr[i]).length>2) return true;
  }
  return false;
}
var myArray = ["AB", "CD"];
var givenString = "ABCDAB";
document.body.innerHTML = checkDuplicate(myArray, givenString);
document.body.innerHTML += '<br>'+checkDuplicate(myArray, "ABCDBD")