【问题标题】:How do I check if string contains substring? [duplicate]如何检查字符串是否包含子字符串? [复制]
【发布时间】:2011-03-29 16:32:20
【问题描述】:

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

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

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

我只想在所选选项包含“是”字样时执行该操作,并且会忽略价格修饰符。

【问题讨论】:

  • 将您的选择器从 $('select[id="Engraving"]') 更改为 $('#Engraving')。它会更快。在change 处理程序中,this 指的是#Engraving 元素,所以你可以做$(this).find('option:selected')
  • :contains 选择器怎么样?
  • 这和jQuery有什么关系?这是纯 JavaScript 问题。

标签: javascript jquery string substring contains


【解决方案1】:

像这样:

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

【讨论】:

  • 谁能解释一下if (/yes/i.test(str))
  • @DrewS:这是一个正则表达式文字。
【解决方案2】:

您可以为此使用searchmatch

str.search( 'Yes' )

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

【讨论】:

  • 很高兴知道替代方案,但使用 indexOf 更快。 stackoverflow.com/questions/354110/…
  • 注意 search 使用正则表达式,所以即使没有 . 字符,'abc'.search('.') > -1 也会返回 true。
【解决方案3】:

现在写这个答案已经很晚了,但我还是想把它包括在内。 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
}

查看documentation 了解更多信息。

【讨论】:

    【解决方案4】:

    另一种方式:

    var testStr = "This is a test";
    
    if(testStr.contains("test")){
        alert("String Found");
    }
    

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        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 
        

        【讨论】:

          【解决方案7】:

          你可以在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);
              };
          }
          

          【讨论】:

            【解决方案8】:

            如果您会使用库,您可能会发现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");
            

            ..你更喜欢哪个。

            【讨论】:

              【解决方案9】:

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

              【讨论】:

                【解决方案10】:

                您还可以检查字符串中是否包含确切的单词。例如:

                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 方法。

                【讨论】:

                  【解决方案11】:

                  以上方法都不适合我,因为有空格,但这就是我所做的

                  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";
                              }
                  
                          }
                      }
                  

                  【讨论】:

                    【解决方案12】:

                    您可以定义一个扩展方法并在以后使用它。

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

                    这样您就可以在页面中的任何位置使用:

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

                    返回 true

                    请参阅下面的帖子了解更多扩展帮助方法。 Javascript helper methods

                    【讨论】:

                      猜你喜欢
                      • 2019-06-07
                      • 2011-11-09
                      • 2013-05-18
                      • 1970-01-01
                      • 2018-08-25
                      • 2020-09-20
                      • 2021-12-20
                      • 2016-01-25
                      • 2015-03-25
                      相关资源
                      最近更新 更多