检查字符串中是否存在多个字符串

时间:2013-08-17 23:54:32

标签: javascript

我需要检查一个主字符串中是否存在任何一组字符串。

目前我正在使用带有for循环的数组来检查每个字符串。

有没有更简单的方法,比如我遇到的红宝石解决方案 - How to compare a string against multiple other strings

["string1","string2","string3"].include? myString

2 个答案:

答案 0 :(得分:4)

你的for循环有多复杂?这就是循环的存在。假设您的字符串集是一个名为setOfStrings的数组,而您的主字符串位于名为mainString的变量中:

var stringExists = false;
var setOfStrings = ['string1', 'string2', 'string3'];

for(var i =0;i < setOfStrings.length; i++){
  if(mainString.indexOf(setOfStrings[i]) != -1)
      stringExists = true;
}

它可能不像你的Ruby构造那样简洁,但是它很常见。

答案 1 :(得分:2)

做了一个小实验,发现以下工作正常。唯一的开销是为数组的每个元素生成regexp。如果check为零或更高,则找到其中一个字符串。

if (!('included' in Array.prototype)) {
  Array.prototype.included = function() {
    return arr.map(function (item) {
      var regex = new RegExp(item, 'g');
      if (regex.test(str)) return true;
      return false;
    }).indexOf(true);
  };
}

要返回布尔值而不是数字,只需将其更改为:

if (!('included' in Array.prototype)) {
  Array.prototype.included = function () {
    var regex, found = false;
    for (var i = 0, l = this.length; i < l; i++) {
      regex = new RegExp(this[i], 'g');
      if (regex.test(str)) { found = true; break; }
    }
    return found;
  };
}

var found = arr.included(str);

这是我之前回答的编辑,因为我意识到我实际上没有回答过这个问题:)