Javascript 检查一个字符串中的任何字符是否存在于另一个字符串中的最佳方法

Javascript 检查一个字符串中的任何字符是否存在于另一个字符串中的最佳方法,javascript,string,Javascript,String,我有一个字符串“SünilGarg” 现在我想检查上面的字符串是否包含第二个字符串“üG#$”中的字符 一种方法是使用循环检查第二个字符串和第一个字符串的每个字符。但是有没有其他最好和有效的方法呢?在这种情况下,我不是最聪明的,但我会选择一个循环和indexOff。例如: function isMatch(str) { var matchStr = 'üG#$'; for (var i = 0; i < matchStr.length; i++) { if (str.ind

我有一个字符串“SünilGarg”

现在我想检查上面的字符串是否包含第二个字符串“üG#$”中的字符


一种方法是使用循环检查第二个字符串和第一个字符串的每个字符。但是有没有其他最好和有效的方法呢?

在这种情况下,我不是最聪明的,但我会选择一个循环和indexOff。例如:

function isMatch(str) {
  var matchStr = 'üG#$';
  for (var i = 0; i < matchStr.length; i++) {
    if (str.indexOf(matchStr[i]) !== -1) {
      return true;
    }
  }
  return false;
}
函数isMatch(str){
var matchStr='üG#$';
对于(变量i=0;i

不确定是否有更明智的举措,但我认为regex可能会更慢。

在这种情况下,我不是最聪明的,但我会选择一个循环和indexOff。例如:

function isMatch(str) {
  var matchStr = 'üG#$';
  for (var i = 0; i < matchStr.length; i++) {
    if (str.indexOf(matchStr[i]) !== -1) {
      return true;
    }
  }
  return false;
}
函数isMatch(str){
var matchStr='üG#$';
对于(变量i=0;i
不确定是否有更明智的举措,但我认为regex可能会更慢。

试试这个:

var mainString = "SünilGarg",
  charsString = "üG#$";

var contains = Array.prototype.some.call(mainString, function(char) { 
   return charsString.indexOf(char) !== -1;
});
由于字符串是类似于数组的对象(部分),因此很容易对其使用一些数组方法。

尝试以下方法:

var mainString = "SünilGarg",
  charsString = "üG#$";

var contains = Array.prototype.some.call(mainString, function(char) { 
   return charsString.indexOf(char) !== -1;
});

因为字符串是类似于数组的对象(部分),所以对它们使用一些数组方法很容易。

下面的代码应该可以工作

RegExp.escape= function(s) {
  return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

var fString = 'SünilGarg';
var sString = RegExp.escape('üG#$');
var pattern = new RegExp('['+ sString +']');
pattern.test(fString); //Will return true

下面的代码应该可以工作

RegExp.escape= function(s) {
  return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

var fString = 'SünilGarg';
var sString = RegExp.escape('üG#$');
var pattern = new RegExp('['+ sString +']');
pattern.test(fString); //Will return true

使用
indexOf
检查是否存在字符匹配

function checkString(myString,withCompare){
 var dumArray = withCompare.split('')
 var i = 0;
 for(i;i<dumArray.length;i++){
   if(myString.indexOf(dumArray[i]) ==-1){
      // do nothing
      console.log('nothing')
   }
    else{
      console.log(dumArray[i])
    }
 }


}

checkString('hello','mvo');
函数检查字符串(myString,withCompare){
var dumArray=withCompare.split(“”)
var i=0;

对于(i;i使用
indexOf
检查是否存在字符匹配

function checkString(myString,withCompare){
 var dumArray = withCompare.split('')
 var i = 0;
 for(i;i<dumArray.length;i++){
   if(myString.indexOf(dumArray[i]) ==-1){
      // do nothing
      console.log('nothing')
   }
    else{
      console.log(dumArray[i])
    }
 }


}

checkString('hello','mvo');
函数检查字符串(myString,withCompare){
var dumArray=withCompare.split(“”)
var i=0;

对于(i;i使用es6单内衬:

var str = 'SünilGarg';
var match = 'üG#$';

var res = match.split('').some(v => str.includes(v));
console.log(res);
请注意,这只适用于最新的chrome或firefox等现代浏览器

或使用es5获得更广泛的支持:

var res = match.split('').some(function (v) {
  return str.indexOf(v) > -1;
});

使用es6单衬套:

var str = 'SünilGarg';
var match = 'üG#$';

var res = match.split('').some(v => str.includes(v));
console.log(res);
请注意,这只适用于最新的chrome或firefox等现代浏览器

或使用es5获得更广泛的支持:

var res = match.split('').some(function (v) {
  return str.indexOf(v) > -1;
});

我敢肯定,最快的方法是循环较大的字符串,并为每个字符检查较短的字符串是否包含它:

function containsAny(haystack, needles){
 for(var i = 0; i < haystack.length; i++){
  for(var j = 0; j < needles.length; j++){
   if(haystack[i] === needles[j]) {
    return true;
   }
  }
 }
 return false;
}

我敢肯定,最快的方法是循环较大的字符串,并为每个字符检查较短的字符串是否包含它:

function containsAny(haystack, needles){
 for(var i = 0; i < haystack.length; i++){
  for(var j = 0; j < needles.length; j++){
   if(haystack[i] === needles[j]) {
    return true;
   }
  }
 }
 return false;
}

所以,即使只有一个字符来自第二个字符串,也应该返回true?或者所有字符都应该来自第二个字符串?如果有匹配项,则返回So,即使只有一个字符来自第二个字符串,则应该返回true?或者所有字符都应该来自第二个字符串?如果有匹配项,则返回您需要在ore正在创建regexp。@DmitriPavlutin捕捉得很好。谢谢。我修改了我的答案以转义字符串。我从另一个答案中提取了转义方法。在创建regexp之前,您需要先转义字符串。@DmitriPavlutin捕捉得很好。谢谢。我修改了我的答案以转义字符串。我从另一个答案中提取了转义方法。您对此满意吗ean indexOf(一个“f”)?取决于哪个ES dmitry,我并没有真正尝试发布完美工作的代码。但当它出错时,您可以对其进行编辑。您的意思是indexOf(一个“f”)?取决于哪个ES dmitry,我并没有真正尝试发布完美工作的代码。但当它出错时,您可以对其进行编辑。“类似数组”可能太过分了。最接近的概念是,但String length属性并没有完全切割它(例如,不能通过将字符串的长度设置为较低的值来缩短字符串)。我希望任何修改字符串的数组方法都不会起作用(例如,push,字符串有自己的切片方法)@RobG同意。字符串是
部分类似于数组的对象
:)“类似数组”可能太过分了。最接近的概念是,但字符串长度属性并不能完全减少它(例如,不能通过将字符串长度设置为较低的值来缩短字符串)。我希望任何修改字符串的数组方法都不会起作用(例如,push和string都有自己的slice方法)。@RobG同意。string是
部分类似数组的对象
:)测试不是决定性的,因为在第二个循环的第一个字符上会找到匹配项,所以只测试五个字符。在这种情况下,越短越长的检查速度必须越快(在本例中)由于将在第一个循环的第二个字符上找到匹配项(即,它将只测试两个字符)。这样的短测试意味着安装费用昂贵的情况下没有时间恢复成本(如果可以的话)。测试不是决定性的,因为在第二个循环的第一个字符上会找到一个匹配项,所以只测试五个字符。在这种情况下,在较长的字符上检查较短的字符必须更快,因为在第一个循环的第二个字符上会找到匹配项(即,它只测试两个字符)。这样的短期测试意味着安装费用昂贵的情况下没有时间收回成本(如果可以的话)。