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

IT技术 javascript jquery string substring contains
2021-01-27 22:12:02

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

问题是购物车还包含文本中的价格修饰符,每个产品的价格修饰符可能不同。以下代码有效:

$(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();
        }
    });
});

如果所选选项包含“是”一词,我只想执行该操作,并且会忽略价格修饰符。

6个回答

像这样:

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 总而言之,这意味着它将查看是否可以在变量中找到字母y, e, 并s按照确切的顺序,不区分大小写str
@DrewS:这是一个正则表达式文字。
2021-03-22 22:12:02
谁能解释一下if (/yes/i.test(str))
2021-03-30 22:12:02

您可以为此使用搜索匹配

str.search( 'Yes' )

将返回匹配的位置,如果未找到则返回 -1。

请注意search使用正则表达式,因此'abc'.search('.') > -1即使没有.字符也返回 true
2021-03-23 22:12:02
很高兴知道替代方案,但使用 indexOf 更快。stackoverflow.com/questions/354110/...
2021-03-31 22:12:02

写这个答案已经很晚了,但我想无论如何都要包括它。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
}

查看文档以了解更多信息。

其他方式:

var testStr = "This is a test";

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

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

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以使其在旧浏览器上工作。