我正在做一个非常基本的字符串匹配测试,如下所示:
if(msList.indexOf(textChoice) != -1)
这很有效除了偶尔我正在寻找的子字符串(textChoice)以 Asterisk 结尾。然后我最终得到错误的匹配,因为字符串中的 Asterisk 被解释为运算符,而不是字符串中的字符。
那么我该如何进行此测试,以便将子字符串中的任何 Asterisk 都视为常规字符?
PS。我知道简单的答案是“不要在子字符串中包含 Asterisk ”,但它们在我正在使用的数据中 - 我无法摆脱它们。最佳答案
子字符串中的所有字符都将被视为常规字符。 *
不是特殊运算符,不会以任何方式改变 indexOf
的行为。此外,indexOf
方法永远不应该返回 false
。它将返回:
-1
如果未找到匹配项或- 找到匹配子字符串的起始索引
请注意,起始索引可以是 0
,这对于子字符串搜索来说并不等于 false。它只是意味着在字符串的开头找到了子字符串。
"ABC".indexOf("AB") // 0
进行显式检查,将返回值与 -1
进行比较,而不仅仅是检查真实值。
if("ABC".indexOf("AB")) {
// will never execute
}
相反,请始终这样做:
if("ABC".indexOf("AB") != -1) {
// ..
}
关于JavaScript,字符串 : test string for presence of sub-string that includes an asterisk (*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3295001/