如何检查字符串中是否包含子串?

1153

我有一个购物车,在下拉菜单中显示产品选项,如果他们选择“是”,我想在页面上显示其他一些字段。

问题是购物车中的文本还包括价格调整器,每个产品的价格调整器可能不同。以下代码可行:

$(document).ready(function() {
    $('select[id="Engraving"]').change(function() {
        var str = $('select[id="Engraving"] option:selected').text();
        if (str == "Yes (+ $6.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
将你的选择器从 $('select[id="Engraving"]') 更改为 $('#Engraving'),这样会更快。在 change 处理程序内部,this 指的是 #Engraving 元素,因此您可以使用 $(this).find('option:selected') - user113716
那么:contains选择器怎么样? - Oliver Ni
3
这与jQuery有什么关系?这是一个纯粹的JavaScript问题。 - user182669
12个回答

2363

像这样:

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

...或者您可以使用波浪号运算符:

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

这个方法有效是因为,如果字符串没有被找到,indexOf() 方法会返回 -1

请注意,这种方法区分大小写。
如果您需要不区分大小写的搜索,请使用以下代码:

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

或者:

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

后者是一个正则表达式regex

正则表达式的分解:

  • / 表示这是正则表达式
  • yes 意味着该正则表达式将以确切的顺序找到这些确切字符
  • / 结束正则表达式
  • i 将正则表达式设置为不区分大小写
  • .test(str) 确定正则表达式是否与str匹配
  • 总之,它意味着它将在变量str中以不区分大小写的方式查找字母yes是否按照确切的顺序出现。

35
请问能否解释一下 if (/yes/i.test(str)) 这段代码的意思? - Drew S
56
那是一个正则表达式字面量。 - SLaks

137
你可以使用searchmatch来实现这个功能。 str.search( 'Yes' ) 将会返回匹配到的位置,如果没有找到则返回-1。

27
了解其他方法固然好,但使用 indexOf 更快。https://dev59.com/-3RC5IYBdhLWcg3wROzk - Blowsie
3
请注意,search 使用正则表达式,所以即使没有 . 字符, 'abc'.search('.') > -1 也会返回 true。 - Oriol

60

虽然已经很晚了,但我还是想把这个答案写进来。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
}

查看文档以获取更多信息。


这在性能方面如何比较? - Tristanisginger

29

另一种方式:

var testStr = "This is a test";

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

** 在 Firefox、Safari 6 和 Chrome 36 上测试通过 **


出现错误:testStr.contains 不是一个函数。 - Aditya72

21

ECMAScript 6 引入了 String.prototype.includes,之前称为 contains

它可以像这样使用:

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

它还接受一个可选的第二个参数,用于指定开始搜索的位置:

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

它可以被兼容旧浏览器的Polyfill来实现。


13

includes() 方法用于判断一个字符串是否包含另一个指定的字符串,并返回 true 或 false。

语法:-string.includes(searchString[, position])

searchString:- 要在该字符串中搜索的字符串。

position:- 可选参数。在该字符串中开始搜索 searchString 的位置。默认值为 0。

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

10
您可以在IE和Chrome中使用此Polyfill。
if (!('contains' in String.prototype)) {
    String.prototype.contains = function (str, startIndex) {
        "use strict";
        return -1 !== String.prototype.indexOf.call(this, str, startIndex);
    };
}

5
如果您能够使用库,您可能会发现Lo-Dash JS库非常有用。在这种情况下,请继续检查_.contains()(从v4开始替换为_.includes())。
(注意,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");

无论您喜欢哪一个更好。


4

我知道最好的方法是 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);


1
你也可以检查一个字符串是否包含精确的单词。例如:
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 方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接