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

时间:2015-08-18 06:50:36

标签: javascript arrays

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

3 个答案:

答案 0 :(得分:1)

您可以使用map和indexOf

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个实例,则不能有2个实例: - )

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

check.indexOf(true) !== -1

基本上检查此数组是否包含true,即如果任何元素出现两次并且您有结果。

答案 1 :(得分:0)

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

正则表达式应该永远是最后的手段。

答案 2 :(得分:0)

如果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")
&#13;
&#13;
&#13;