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

Jor*_*ris 966 javascript string jquery substring contains

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

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

$(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();
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

但是,我宁愿使用这样的东西,这是行不通的:

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

如果所选选项包含单词"是",我只想执行操作,并忽略价格修饰符.

SLa*_*aks 2076

像这样:

if (str.indexOf("Yes") >= 0)
Run Code Online (Sandbox Code Playgroud)

...或者你可以使用代字号运算符:

if (~str.indexOf("Yes"))
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为如果根本找不到字符串则indexOf()返回-1.

请注意,这是区分大小写的.
如果您想要不区分大小写的搜索,可以编写

if (str.toLowerCase().indexOf("yes") >= 0)
Run Code Online (Sandbox Code Playgroud)

要么,

if (/yes/i.test(str))
Run Code Online (Sandbox Code Playgroud)

  • @DrewS:这是一个正则表达式字面值. (51认同)
  • 任何人都可以解释`if(/yes/i.test(str))` (27认同)
  • 请注意,IE8中不支持`indexOf`. (7认同)
  • 正在寻找与此相反的情况.如果不存在,将返回-1.http://www.w3schools.com/jsref/jsref_indexof.asp返回值:一个数字,表示第一次发生指定搜索值的位置,如果从未发生,则为-1.根据我的需要:if(str.toLowerCase().indexOf("yes")== -1) (4认同)
  • @njenson:它适用于字符串 - 不适用于Array对象.但是,谢谢你吓坏了我.http://stackoverflow.com/questions/21772308/what-is-the-alternate-function-for-indexof-for-string-in-ie8 (3认同)

hoo*_*ter 117

您可以使用搜索匹配.

str.search( 'Yes' )

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

  • 很高兴知道替代方案,但使用indexOf更快.http://stackoverflow.com/questions/354110/in-javascript-what-is-the-difference-between-indexof-and-search (24认同)
  • @IanStanway和hookedonwinter请不要链接到w3schools.他们不是合法的来源,他们试图出售像他们的证书这样的愚蠢的东西.链接:搜索(developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search)匹配(developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/字符串/匹配)indexof(developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexof)MDN是javascript的绝佳来源.w3fools.com可以告诉你更多. (17认同)
  • @DutGRIFF是和否.关于这一点的讨论不适用于此,但由于w3fools已经创建,并且由于每个人都开始警告人们远离w3schools,他们已经改进了他们的网站.我一般都同意你的意见并避免使用它,但遗憾的是谷歌排名认为不然而且我懒得找到一个更好的网站用于我的链接:-) (7认同)
  • 是啊但也不支持IE (4认同)
  • 它适用于字符串,请参阅http://www.w3schools.com/jsref/jsref_indexof.asp (4认同)
  • 请注意 `search` 使用正则表达式,因此即使没有 `.` 字符,`'abc'.search('.') > -1` 也会返回 true。 (2认同)

And*_*ham 27

其他方式:

var testStr = "This is a test";

if(testStr.contains("test")){
    alert("String Found");
}
Run Code Online (Sandbox Code Playgroud)

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

  • 您使用的是哪种浏览器?"TypeError:Object这是一个测试没有方法'包含'"<~Chrome 25 (3认同)
  • yoshi,看起来这只适用于FireFox ...对不起混淆,在FF面前没想到要在其他浏览器中测试... (2认同)
  • 在撰写本文时,它似乎得到了Chromium 36的支持.[更多细节](https://kangax.github.io/es5-compat-table/es6/#String.prototype.contains). (2认同)

Mun*_*osh 27

写这个答案已经很晚了,但无论如何我想要包括它.String.prototype现在有一个方法includes可以检查子串.此方法区分大小写.

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

要检查子字符串,可以采用以下方法:

if (mainString.toLowerCase().includes(substringToCheck.toLowerCase())) {
    // mainString contains substringToCheck
}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您对此感到担心,则任何版本的IE或Opera当前均不支持此方法。 (2认同)

Ori*_*iol 14

ECMAScript 6介绍String.prototype.includes,以前命名contains.

它可以像这样使用:

'foobar'.includes('foo'); // true
'foobar'.includes('baz'); // false
Run Code Online (Sandbox Code Playgroud)

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

'foobar'.includes('foo', 1); // false
'foobar'.includes('bar', 1); // true
Run Code Online (Sandbox Code Playgroud)

它可以被polyfilled以使其在旧浏览器上工作.


小智 9

您可以在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);
    };
}
Run Code Online (Sandbox Code Playgroud)

  • 这在我看来是一个很好的解决方案.给你一个.contains方法来完成所要求的.确定它看起来不好看,但它是一个很棒的实用程序...也"如果"与jQuery无关......所有其他答案都是js实现... (5认同)

Kar*_*eem 8

返回关键字包含在字符串中的次数.

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


Sel*_*ish 5

如果您有能力使用库,您可能会发现Lo-Dash JS 库非常有用。在这种情况下,请继续检查_.contains()_.includes()从 v4 开始替换)。

\n\n

(注意 Lo-Dash 约定将库对象命名为 _。\n不要忘记在同一页面中检查安装,以便为您的项目进行设置。)

\n\n
_.contains("foo", "oo");     // \xe2\x86\x92 true\n_.contains("foo", "bar");    // \xe2\x86\x92 false\n// Equivalent with:\n_("foo").contains("oo");     // \xe2\x86\x92 true\n_("foo").contains("bar");    // \xe2\x86\x92 false\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于您的情况,请继续使用:

\n\n
_.contains(str, "Yes");\n// or:\n_(str).contains("Yes");\n
Run Code Online (Sandbox Code Playgroud)\n\n

..无论你更喜欢哪一个。

\n


Par*_*val 5

includes()方法确定是否可以在另一个字符串中找到一个字符串,并根据需要返回true或false。

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

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

位置:-可选。该字符串中开始搜索searchString的位置;默认为0。

string = 'LOL';
console.log(string.includes('lol')); // returns false 
console.log(string.includes('LOL')); // returns true 
Run Code Online (Sandbox Code Playgroud)