Как проверить, содержит ли строка подстроку в JavaScript?



Answers

Вы можете легко добавить метод contains к String с помощью этого оператора:

String.prototype.contains = function(it) { return this.indexOf(it) != -1; };

Примечание: см. Комментарии ниже для допустимого аргумента для того, чтобы не использовать это. Мой совет: используйте свое собственное мнение.

В качестве альтернативы:

if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; }
Question

Обычно я ожидал бы String.contains() , но, похоже, его нет.

Каков разумный способ проверить это?




Чтобы собрать какие-то допустимые решения:

var stringVariable = "some text";
var findString = "text";

//using `indexOf()`
var containResult1 = stringVariable.indexOf(findString) != -1;
document.write(containResult1+', ');

//using `lastIndexOf()`
var containResult2 = stringVariable.lastIndexOf(findString) != -1;
document.write(containResult2+', ');

//using `search()`
var containResult3 = stringVariable.search(findString) != -1;
document.write(containResult3+', ');
     
//using `split()`
var containResult4 = stringVariable.split(findString)[0] != stringVariable;
document.write(containResult4+'');




Самый простой способ - использовать indexOf . Чтобы просто проверить строковую string подстроки substr вы можете использовать этот метод:

string = "asdf";
substr = "as";
alert(string.indexOf(substr) == -1 ? false : true);

Поскольку вам нужна функция string.contains() , вы можете реализовать ее самостоятельно следующим образом:

String.prototype.contains = function(test) {
    return this.indexOf(test) == -1 ? false : true;
};

Теперь вы можете использовать этот более короткий метод, чтобы проверить, содержит ли строка специальную подстроку:

string = "asdf";
alert(string.contains("as"));

Вот и JSFiddle .




Простой обходной путь

if (!String.prototype.contains) {
  String.prototype.contains= function() {
    return String.prototype.indexOf.apply(this, arguments) !== -1;
  };
}

вы можете использовать следующим образом

"hello".contains("he") // true
"hello world".contains("lo w")//true
"hello world".contains("lo wa")//false
"hello world".contains(" ")//true
"hello world".contains("  ")//false

Ссылка MDN




Код JavaScript для использования метода contains в массиве:

<html>
    <head>
        <h2>Use of contains() method</h2>
        <script>
            Array.prototype.contains = function (element) {
                for (var i = 0; i < this.length; i++) {
                    if (this[i] == element) {
                        return true;
                    }
                }
                return false;
            }
            arr1 = ["Rose", "India", "Technologies"];
            document.write("The condition is "+arr1.contains("India")+"<br>");
        </script>
    </head>

    <b>[If the specified element is present in the array, it returns true otherwise
    returns false.]</b>

</html>

В данном коде метод contains определяет, присутствует ли указанный элемент в массиве или нет. Если указанный элемент присутствует в массиве, он возвращает true, иначе он возвращает false.




Вы искали .indexOf String.prototype.indexOf .

indexOf будет возвращать индекс подстрочной подстроке. Индекс будет коррелировать с тем, где начинается подстрока. Если совпадения нет, возвращается -1. Вот простая демонстрация этой концепции:

var str = "Hello World"; // For example, lets search this string,
var term = "World"; // for the term "World",
var index = str.indexOf(term); // and get its index.
if (index != -1) { // If the index is not -1 then the term was matched in the string,
  alert(index); // and we can do some work based on that logic. (6 is alerted)
}




Общим способом записи метода contains в JavaScript является:

if (!String.prototype.contains) {
    String.prototype.contains = function (arg) {
        return !!~this.indexOf(arg);
    };
}

Оператор побитового отрицания ( ~ ) используется для превращения -1 в 0 (false), а все остальные значения будут отличными от нуля (правдивые).

Операторы с двойным булевым отрицанием используются для перевода числа в логическое.




Вы можете использовать метод search() JavaScript search() .

Синтаксис: string.search(regexp)

Он возвращает позицию совпадения, или -1, если совпадение не найдено.

См. Примеры: jsref_search

Вам не нужен сложный синтаксис регулярных выражений. Если вы не знакомы с ними, то st.search("title") простой st.search("title") . Если вы хотите, чтобы ваш тест был нечувствительным к регистру, вам следует выполнить st.search(/title/i) .




var index = haystack.indexOf(needle);



Другой способ сделать это:

Вы можете использовать функцию соответствия, то есть что-то вроде:

x = "teststring";

if (x.match("test")) {
     // Code
}

match () также может работать с регулярным выражением:

x = "teststring";

if (x.match(/test/i)) {
     // Code
}



Существует гладкий и лучший способ сделать это, и он использует оператор (BitWise NOT).

if(~"John".indexOf("J")) {
  alert("Found")
}
else {
  alert("Not Found");
}

Побитовое не преобразует «x» в - (x + 1), поэтому, если x получается -1 из метода indexOf, то он будет преобразован в - (-1 + 1) = -0, что является ложным значением.




Если вы искали альтернативу для написания чек-уродливого -1, вместо этого вы добавляете ~ тильду.

if (~haystack.indexOf('needle')) alert('found');

Джо Циммерман - вы увидите, что использование ~ on -1 преобразует его в 0. Число 0 является значением false, что означает, что он будет вычисляться как false при преобразовании в Boolean. Сначала это может показаться неважным, но помните, что такие функции, как indexOf, возвращают -1, когда запрос не найден. Это означает, что вместо того, чтобы писать что-то похожее на это:

if (someStr.indexOf("a") >= 0) {
  // Found it
} else  {
  // Not Found
}

Теперь у вас может быть меньше символов в коде, чтобы вы могли писать так:

if (~someStr.indexOf("a")) {
  // Found it
} else  {
  // Not Found
}

Подробнее здесь




JavaScript

 var str = "My big string contain apples and oranges";
 var n = str.indexOf("apples"); 
 alert(n); //will alert 22, -1 if not found

JQuery

  <p>My big string contain apples and oranges</p>
  alert($("p:contains(apples)")[0] != undefined); //will alert true if found



Вы можете использовать jQuery :contains селектор.

$("div:contains('John')")

Проверьте его здесь: contains-selector









Links