如何使 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
这里有两个不同检查的 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