检查另一个字符串 JavaScript 中一个字符串是否有任何字符的最佳方法

best way to check if any char of one string in another string javascript

本文关键字:字符串 任何 字符 是否 方法 最佳 一个 JavaScript 另一个 检查      更新时间:2023-09-26

我有一个字符串"SünilGarg"

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

一种方法是使用循环检查第二个字符串的每个字符与第一个字符串。但是有没有其他最好和有效的方法可以做到这一点?

试试这个:

var mainString = "SünilGarg",
  charsString = "üG#$";
var contains = Array.prototype.some.call(mainString, function(char) { 
   return charsString.indexOf(char) !== -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;
}

这里有一些证据:http://jsperf.com/stringcontainsany

编辑:

实际上,string.indexOf比索引到字符串中更快,因此这更有效:

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

下面的代码应该可以工作

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');

斯菲德尔

使用 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;
});

在这种情况下,我不是最聪明的,但我会使用一个循环和 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;
}

不确定是否有更聪明的举动,但我认为正则表达式可能会更慢。

相关文章: