【问题标题】:Check if var has "cheese" OR "cake" in it?检查 var 中是否有“奶酪”或“蛋糕”?
【发布时间】:2009-11-01 16:40:45
【问题描述】:

如何检查变量中是否包含某些内容?我尝试检查 .match() 是否返回 null 但这对于使用 OR 进行检查没有用?

【问题讨论】:

    标签: javascript regex string match


    【解决方案1】:

    /cheese|cake/.test(a)

    如果你想不区分大小写地测试,你可以在正则表达式的末尾添加一个i

    【讨论】:

    • +1 不仅适用于|,而且因为在这种情况下test(...)match(...) 更合适。
    【解决方案2】:

    由于你只得到了涉及正则表达式的答案,这里是纯字符串操作的解决方案:

    var hasMatch = input.indexOf('cheese') != -1 || input.indexOf('cake') != -1;
    

    【讨论】:

      【解决方案3】:

      试试这个:

      var myString = 'I love cheese';
      var isMatch = new RegExp(/(cheese|cake)/i).test(myString); //should return true
      

      【讨论】:

      • 不,它不应该返回 true。它应该返回一个匹配数组。
      • 谢谢,我总是混合匹配和测试。
      • 这里的括号是多余的!
      • 另外值得指出的是,i 标志使其不区分大小写,这取决于具体需要可能会或不需要。
      【解决方案4】:

      到目前为止发布的所有表达式也将匹配“cheeseburger”和“cakewalk”。不知道这是否可取,以防万一以下版本不可用:

      alert(/\b(cheese|cake)\b/i.test("cheese and cake")) // true
      alert(/\b(cheese|cake)\b/i.test("cheeseburger and pancake")) // false
      

      【讨论】:

        【解决方案5】:

        您不只是想要以下内容吗?

        var result = input.match("cheese") || input.match("cake");
        

        【讨论】:

        • 使用带有 or 的正则表达式和单个正则表达式,将比做匹配更高效(即使它们具有相同的结果)。请注意,我没有否决它,但我更喜欢使用正确的正则表达式。
        • @Noldrin 因为你不需要matchtest 就足够了。 1) match 通过创建一个数组来保存匹配的字符串(如果成功)会降低性能; test 没有。 2) match 返回数组或 null,而不是布尔值(如 test 所做的那样),因此您可能仍需要对结果进行类型转换。 3)当单个正则表达式可以正常工作时,无需调用match 两次(如@Gyoshev 示例)。 /cake|cheese/.test(input) 更短、更简单、更高效。为什么要在这里使用match
        • @kangax: 回复: 1. 性能影响小。 2. null 被隐式转换为false 和非null 到true,所以没有问题。 3. 使用两个匹配可以说更具可读性。
        • @Noldorin 我在您的示例中看不到隐式类型转换。介意解释吗?当然,性能是否相关在这里是相当主观的。我的观点是,test 的存在正是为了这些目的,而使用 match 只是使用了错误的工具来完成这项工作。我同意你关于双重匹配更具可读性的观点(尤其是对于不熟悉正则表达式的人)。
        • @kangax:也许test 更合适,但我的解决方案仍然可行,所以我不认为它值得一票否决。
        【解决方案6】:
        var matched = !!('cheese'.match(/(?:cheese|cake)/g));
        alert(matched)
        

        或 RegExp.prototype.test:

        var matched = /cheese|cake/i.test('cheese cake');
        alert(matched)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多