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

этот вопрос уже есть ответ здесь:

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

проблема что корзина также включает в себя модификатор цены в тексте, который может быть разным для каждого продукта. Работает следующий код:

$(document).ready(function() {
    $('select[id="Engraving"]').change(function() {
        var str = $('select[id="Engraving"] option:selected').text();
        if (str == "Yes (+ .95)") {
            $('.engraving').show();
        } else {
            $('.engraving').hide();
        }
    });
});

однако я бы предпочел использовать что-то вроде этого, что не работает:

$(document).ready(function() {
    $('select[id="Engraving"]').change(function() {
        var str = $('select[id="Engraving"] option:selected').text();
        if (str *= "Yes") {
            $('.engraving').show();
        } else {
            $('.engraving').hide();
        }
    });
});

Я хочу выполнить действие, только если выбранный параметр содержит слово "да" и игнорирует модификатор цены.

13 ответов


такой:

if (str.indexOf("Yes") >= 0)

...или вы можете использовать оператор Тильды:

if (~str.indexOf("Yes"))

это работает, потому что indexOf() возвращает -1 если строка не найдена вообще.

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

if (str.toLowerCase().indexOf("yes") >= 0)

или

if (/yes/i.test(str))

можно использовать поиск или матч для этого.

str.search( 'Yes' )

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


иначе:

var testStr = "This is a test";

if(testStr.contains("test")){
    alert("String Found");
}

* * протестировано на Firefox, Safari 6 и Chrome 36**


довольно поздно писать этот ответ, но я все равно подумал о том, чтобы включить его. String.prototype теперь есть метод includes который может проверить подстроку. Этот метод чувствителен к регистру.

var str = 'It was a good date';
console.log(str.includes('good')); // shows true
console.log(str.includes('Good')); // shows false

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

if (mainString.toLowerCase().includes(substringToCheck.toLowerCase())) {
    // mainString contains substringToCheck
}

Проверьте документация чтобы узнать больше.


ECMAScript 6 представляет String.prototype.includes, ранее называлась contains.

его можно использовать так:

'foobar'.includes('foo'); // true
'foobar'.includes('baz'); // false

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

'foobar'.includes('foo', 1); // false
'foobar'.includes('bar', 1); // true

может быть polyfilled чтобы он работал на старых браузерах.


вы можете использовать этот Polyfill в ie и chrome

if (!('contains' in String.prototype)) {
    String.prototype.contains = function (str, startIndex) {
        "use strict";
        return -1 !== String.prototype.indexOf.call(this, str, startIndex);
    };
}

возвращает количество раз, когда ключевое слово включено в строку.

var count = "I have one keyword".match(/keyword/g);
var clean_count = !count ? false : count.length;

метод includes () определяет, может ли одна строка быть найдена в другой строке, возвращая true или false в зависимости от обстоятельств.

синтаксис: - string.включает (searchString [, position])

searchString: - строка для поиска в этой строке.

должность:-необязательно. Позиция в этой строке, с которой следует начать поиск строки поиска; по умолчанию 0.

string = 'LOL';
console.log(string.includes('lol')); // returns false 
console.log(string.includes('LOL')); // returns true 

Я знаю, что лучший способ-это str.indexOf(s) !== -1; http://hayageek.com/javascript-string-contains/

Я предлагаю другой способ(str.replace(s1, "") !== str):

var str = "Hello World!", s1 = "ello", s2 = "elloo";
alert(str.replace(s1, "") !== str);
alert(str.replace(s2, "") !== str);

если вы способны использовать библиотеки, вы можете найти, что Lo-Dash библиотека JS довольно полезна. В этом случае, вперед и проверьте _.contains() (заменить на _.includes() по состоянию на v4).

(Примечание соглашение Lo-Dash именует объект библиотеки _. Не забудьте проверить установку на той же странице, чтобы настроить ее для вашего проекта.)

_.contains("foo", "oo");     // → true
_.contains("foo", "bar");    // → false
// Equivalent with:
_("foo").contains("oo");     // → true
_("foo").contains("bar");    // → false

в вашем случае, идти вперед и использовать:

_.contains(str, "Yes");
// or:
_(str).contains("Yes");

..какой тебе больше понравится.


вы также можете проверить, содержится ли точное слово в строке. Например:

function containsWord(haystack, needle) {
    return (" " + haystack + " ").indexOf(" " + needle + " ") !== -1;
}

использование:

containsWord("red green blue", "red"); // true
containsWord("red green blue", "green"); // true
containsWord("red green blue", "blue"); // true
containsWord("red green blue", "yellow"); // false

Так jQuery делает свой метод hasClass.


ни один из вышеперечисленных не работал для меня, поскольку были пробелы, но это то, что я сделал

tr = table.getElementsByTagName("tr");

    for (i = 0; i < tr.length; i++) {
        td = tr[i].getElementsByTagName("td")[0];
        bottab.style.display="none";
        bottab2.style.display="none";
        if (td) {
        var getvar=td.outerText.replace(/\s+/, "") ;

            if (getvar==filter){
                tr[i].style.display = "";
            }else{
                tr[i].style.display = "none";
            }

        }
    }

вы можете определить метод расширения и использовать его в дальнейшем.

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

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

var str="hello how are you";
str.contains("are");

возвращает правда.

см. ниже Сообщение для более вспомогательных методов расширения. вспомогательные методы Javascript