判断一个字符串是否包含一个子串的方法

在我们前端日常开发中,经常会遇到判断一个字符串中是否包含某个子串,在此篇文章,我们将去探究一些解决此种需求的方法以及正确的使用它们。理想情况下,我们要找的是一个能匹配我们的目的(if x contains y)的方法,并返回true或false。

一、String.prototype.indexOf和String.prototype.lastIndexOf

i这两个方法,可能是我们最容易想到的,如果包含子串,则返回大于等于0的索引,否则返回-1,没有达到我们的理想情况。

var str    = "My blog name is Benjamin-专注前端开发和用户体验",
    substr = "Benjamin";

function isContains(str, substr) {
    return str.indexOf(substr) >= 0;
}

//true
console.log(isContains(str, substr));

二、String.prototype.search

我们想到了String.prototype.search方法,因search方法的参数是一个正则表达式,所以和indexOf的情况相同。

var str    = "My blog name is Benjamin-专注前端开发和用户体验",
    substr = "Benjamin";

function isContains(str, substr) {
    return new RegExp(substr).test(str);
}

//true
console.log(isContains(str, substr));

这个方法比indexOf方法看起来好点,该方法直接返回true or false,同时方法名称test比indexOf更有语义性。

三、String.prototype.contains

var str    = "My blog name is Benjamin-专注前端开发和用户体验",
    substr = "Benjamin";

function isContains(str, substr) {
    return str.contains(substr);
}

//true
console.log(isContains(str, substr));

此方法目前只有Firefox支持,还处于ECMAScript 6草案中。这个方法满足了上面提到的理想情况。详情请戳这里。如果你想使用contains方法,可以参考第三方库string.js,GitHub:string.js。源码实现:

    contains: function(ss) {
      return this.s.indexOf(ss) >= 0;
    },


其它方法待补充。。。



当然在性能问题上,使用哪种方法更快,还有待测试。 以上就是本文的内容,感谢您的阅读,文中不妥之处还望批评指正。

时间: 2024-08-07 20:53:10

判断一个字符串是否包含一个子串的方法的相关文章

js里面判断一个字符串是否包含某个子串的方法

1. ES6的includes, 返回 Boolean var string = "foo", substring = "oo"; string.includes(substring); // true string.includes(substring,2); // false , 第二个参数表示开始查找的位置 2. ES5 indexOf,返回子串起始位置,不包含则返回-1 var string = "foo", substring = &q

Js判断一个字符串是否包含一个子串

Js中经常遇到判断一个字符串是否包含一个子串,java语言中有containes的方法,直接调用就可以了.除非引用第三方数据库,Js中没有contains方法. 为了实现更java语言中containes方法相同的效果,最简单的一种做法是利用js中字符串查找位置的方法indexOf(“o”大写).此方法的返回的值得可能有 -1,0,n(正整数)三种情况.0是当子串在字符串第1位开始包含的情况下返回,例子如下: <script> var str="he"; var strin

Struts标签&lt;s:if&gt;判断字符串是否包含一个固定的值

Struts标签<s:if>判断字符串是否包含一个固定的值:1.如果比较对象是字符串: 1 <s:if test="str.contains('判断是否包含的字符串')" > 2 包含 3 </s:if> 4 <s:else> 5 不包含 6 </s:else> 2.如果比较对象是某个对象的属性: 1 <s:if test="(notice.title).contains('通知')"> 2 &

#2 判断一个字符串是否包含重复字符

「Google面试题」 [题目] 判断一个字符串是否包含重复字符.例如:“good”就包含重复字符‘o’,而“abc”就不包含重复字符 [题目分析] 对字符串进行遍历,统计每一个字符的个数,如果不为1则跳出遍历并返回True [解答] 1 #!/Users/minutesheep/.pyenv/shims/python 2 # -*- coding: utf-8 -*- 3 4 5 def isDup(strs): 6 ''' 7 判断字符串是否有重复字符 8 ''' 9 for ch in s

【C语言】判断一个字符串是否是一个字符串的旋转字符串

//判断一个字符串是否是一个字符串的旋转字符串 //利用库函数实现 #include <stdio.h> #include <string.h> #include <assert.h> int IsRotate(char *str1, const char *str2) { assert(str1); assert(str2); strncat(str1, str1,strlen(str1)); if (NULL == strstr(str1, str2)) retur

Struts2一个Action内包含多个请求处理方法的处理,method的使用方法,struts2中

struts2的关于method="{1}"意思详解 <action   name= "Login_* "   method= "{1} "   class= "mailreader2.Login ">中Login_*带*是什么意思?method= "{1} "带{}这个是什么意思?====================================================name=

Java练习题_Map 利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。

从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队. 历届世界杯冠军 届数 举办年份 举办地点 冠军 第一届 1930年 乌拉圭 乌拉圭 第二届 1934年 意大利 意大利 第三届 1938年 法国 意大利 第四届 1950年 巴西 乌拉圭 第五届 1954年 瑞士 西德 第六届 1958年 瑞典 巴西 第七届 1962年 智利 巴西 第八届 1966年 英格兰 英格兰 第九届 1970年 墨西哥 巴西 第十届 1974年 前西德 西德 第十一届 1978年 阿根廷 阿根廷 第

Java-map-第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。 附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录

第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年份,请参考本章附录. 附录 历届世界杯冠军 届数 举办年份 举办地点 冠军 第一届 1930年 乌拉圭 乌拉圭 第二届 1934年 意大利 意大利 第三届 1938年 法国 意大利 第四届 1950年 巴西 乌拉圭 第五届 1954年 瑞士 西德 第六届 1958年 瑞典 巴西 第七届 1962年

输入5个学生的名字(英文),使用冒泡排序按从大到小排序。 提示:涉及到字符串数组,一个字符串是一个一维字符数组;一个 字符串数组就是一个二维字符数组。

#include <stdio.h>#include <string.h> /*输入5个学生的名字(英文),使用冒泡排序按从大到小排序.提示:涉及到字符串数组,一个字符串是一个一维字符数组:一个字符串数组就是一个二维字符数组.*/ void main(){ char stuNames[5][100]; char tmp[100]; int i = 0,j = 0; for(i = 0; i < 5; i++) { printf("请输入第%d个学生的名字:"