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