【问题标题】:Check if any of multiple strings exist in a string检查字符串中是否存在多个字符串中的任何一个
【发布时间】:2013-08-20 02:32:25
【问题描述】:

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

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

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

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

【问题讨论】:

  • 一个正则表达式? RegExp(strings.join('|')).test(myString)
  • 不幸的是,这个 string19 将为 string1 返回 true 但这有效:matchfound = RegExp("^(" +strings.join("|")+")$").test(myString);基本上检查 ^(string1|string2|string3)$ 而不是 string1|string2|string3

标签: javascript


【解决方案1】:

你的 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 构造那么简洁,但它非常常见。

【讨论】:

    【解决方案2】:

    A 做了一个小实验,发现以下工作正常。唯一的开销是为数组的每个元素生成正则表达式。如果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);
    

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

    【讨论】:

    • 嗨,谢谢,但我仍然难以掌握正则表达式,所以实际上是在寻找一个简单易记的解决方案。
    猜你喜欢
    • 2011-03-24
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多