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


Обычно я ожидал бы String.contains()метод, но, похоже, он не существует.

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


7437


источник


Ответы:


Вот список текущих возможностей:

1. (ES6) includes- идти отвечать

var string = "foo",
    substring = "oo";
string.includes(substring);

2. ES5 и старше indexOf

var string = "foo",
    substring = "oo";
string.indexOf(substring) !== -1;

String.prototype.indexOfвозвращает позицию строки в другой строке. Если не найден, он вернется -1,

3. search- идти отвечать

var string = "foo",
    expr = /oo/;
string.search(expr);

4. lodash включает - идти отвечать

var string = "foo",
    substring = "oo";
_.includes(string, substring);

5. RegExp - идти отвечать

var string = "foo",
    expr = /oo/;  // no quotes here
expr.test(string);

6. Матч - идти отвечать

var string = "foo",
    expr = /oo/;
string.match(expr);

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


11257



Вы можете легко добавить 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; }; }

808



Проблема с вашим кодом в том, что JavaScript чувствителен к регистру. Вызов метода

indexof()

на самом деле

indexOf()

Попробуйте его исправить и посмотрите, помогает ли это:

if (test.indexOf("title") !=-1) {
    alert(elm);
    foundLinks++;
}

418



Eсть string.includesв ES6 :

"potato".includes("to");
> true

Обратите внимание, что вам может потребоваться загрузить es6-shimили аналогично, чтобы это работало в старых браузерах.

require('es6-shim')

337



var index = haystack.indexOf(needle);

333



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

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

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

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

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


233



String.prototype.includes() was introduced in ES6.

Determines whether one string may be found within another string, returning true or false as appropriate.

Syntax

var contained = str.includes(searchString [, position]);  

Parameters

searchString

A string to be searched for within this string.

position

The position in this string at which to begin searching for searchString defaults to 0.

Example

var str = "To be, or not to be, that is the question.";

console.log(str.includes("To be"));    // true
console.log(str.includes("question")); // true
console.log(str.includes("To be", 1)); // false  

Note

This may require ES6 shim in older browsers.


166



If you were looking for an alternative to write the ugly -1 check, you prepend a ~ tilde instead.

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

Joe Zimmerman - you'll see that using ~ on -1 converts it to 0. The number 0 is a falsey value, meaning that it will evaluate to false when converted to a Boolean. That might not seem like a big insight at first, but remember functions like indexOf will return -1 when the query is not found. This means that instead of writing something similar to this:

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

You can now have fewer characters in your code so you can write it like this:

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

More details here


119



This piece of code should work well:

var str="This is testing for javascript search !!!";
if(str.search("for") != -1) {
   //logic
} 

82



A common way to write a contains method in JavaScript is:

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

The bitwise negation operator (~) is used to turn -1 into 0 (falsey), and all other values will be non-zero (truthy).

The double boolean negation operators are used to cast the number into a boolean.


77