本文详解JavaScript中判断字符串是否包含子串的三种常用方法:indexOf、search和contains。通过代码示例对比各方法的返回值差异、语义清晰度及浏览器兼容性,重点分析indexOf的索引判断、search的正则支持以及ECMAScript 6草案中contains方法的现状与第三方库实现。
JavaScript判断字符串包含子串的几种方法对比
本文介绍JavaScript中判断字符串是否包含子串的几种实现方式,供读者参考。
在前端开发过程中,经常需要判断一个字符串中是否存在特定的子串。我们需要找到一种能直接表达“包含”语义的方法,使其返回布尔值true或false。
String.prototype.indexOf和lastIndexOf
一、String.prototype.indexOf和String.prototype.lastIndexOf
这两个方法是最常见的选择。如果字符串包含子串,它们返回大于等于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
接着考虑String.prototype.search方法。由于search方法的参数可以是正则表达式,其行为与indexOf类似,即返回索引或-1。
代码如下:
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或false,且方法名test更具语义性。
String.prototype.contains
三、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,本站提供下载链接。其源码实现如下:
代码如下:
contains: function(ss) {
return this.s.indexOf(ss) >= 0;
},其他方法有待补充。
至于性能方面,哪种方法执行更快,仍需实际测试验证。感兴趣的朋友可以动手测试。
希望本文所述内容对大家的JavaScript程序设计有所帮助。