Javascript, строка: тестовая строка на наличие подстроки, включающей звездочку (*) - PullRequest
2 голосов
/ 21 июля 2010

Я делаю довольно простой тест соответствия строк следующим образом:

if(msList.indexOf(textChoice) != -1)

Это хорошо работает за исключением того, что иногда искомая подстрока (textChoice) заканчивается звездочкой. Затем я получаю ложные совпадения, потому что звездочка в строке интерпретируется как оператор, а не символ в строке.

Так как я могу выполнить этот тест, чтобы любые звездочки в подстроке рассматривались как обычные символы?

PS. Я знаю простой ответ: «Не включайте звездочки в свою подстроку», но они находятся в данных, с которыми я работаю - я не могу от них избавиться.

1 Ответ

3 голосов
/ 21 июля 2010

Все символы в подстроке будут рассматриваться как обычные символы. * не является специальным оператором и никак не меняет поведение indexOf. Более того, метод indexOf никогда не должен возвращать false. Он вернется:

  • -1 если совпадений не найдено или
  • начальный индекс соответствующей подстроки, если найден

Обратите внимание, что начальный индекс может быть 0, что не равно false для поиска подстроки. Это просто означает, что подстрока была найдена в начале строки.

"ABC".indexOf("AB") // 0

Поставьте явные проверки, сравнивающие возвращаемое значение с -1 вместо того, чтобы просто проверять истинное значение.

if("ABC".indexOf("AB")) {
    // will never execute
}

Вместо этого всегда делайте это:

if("ABC".indexOf("AB") != -1) {
   // ..
}
...