如何使 JavaScript indexOf() 不检测子字符串

How to make JavaScript indexOf() not detect substring

这里有两个不同检查的 if 条件:

案例 1:

if(plan_name.indexOf("T1")>=0 && plan_name.indexOf("FLEX")>=0 && plan_name.indexOf("Non-VAE")>=0) {
    //do something
}

后跟(在同一个 code/program)

案例 2:

if(plan_name.indexOf("T1")>=0 && plan_name.indexOf("Non-FLEX")>=0 && plan_name.indexOf("Non-VAE")>=0){
    //do something
}

这是应用上述条件的输入:

计划名称 = iOS 7.7 - RC - T1 - Non-FLEX, Non-VAE

在我的代码中,每次 CASE 1 中的第一个 if 条件变得有效时,因为 indexOf() 正在检测子字符串而不是我希望代码检测的 actual specific 字符串(即案例 2 应该是有效的)。如何在 JS 中匹配这样的特定字符串?

一种解决方案是将其拆分并查看字符串是否与数组匹配

var str = "iOS 7.7 - RC - T1 - Non-FLEX, Non-VAE";
var parts = str.split(/[\s,]/g);
console.log("FLEX", parts.indexOf("FLEX")!==-1);
console.log("Non-FLEX", parts.indexOf("Non-FLEX")!==-1);

一个选项是重新排序您的执行流程:

if(plan_name.indexOf("T1")>=0 && 
      plan_name.indexOf("Non-FLEX")>=0 &&
      plan_name.indexOf("Non-VAE")>=0){
    ...
} else if(plan_name.indexOf("T1")>=0 && 
      plan_name.indexOf("FLEX")>=0 &&
      plan_name.indexOf("Non-VAE")>=0) {
   ...
}

由于第一个条件比第二个条件严格,只有第一个条件不成立时才会检查第二个条件。

但是,这仅在没有更多选项时有效,因为如果您还必须查找 'VAE''Non-VAE',那么也许您应该 "tokenize" 字符串:as似乎标记由 spaces 分隔,您可以拆分它,然后在结果数组中查找您需要的每个标记。

第三个选项,仍然假设标记由 spaces 分隔,将 space 添加到您的匹配器:而不是 'FLEX' 寻找 ' FLEX'' Non-Flex'

你的支票应该是这样的

plan_name.indexOf("T1")>=-1

不是这个

plan_name.indexOf("T1")>=0