JavaScript中实现startsWith与endsWith的多种方法
JavaScript早期版本缺少原生的字符串开始和结束匹配功能,开发人员常需借助原型扩展或基础API来实现这一需求。本文将介绍三种主流的实现思路:基于正则表达式的通用封装、基于substr子串提取的逻辑判断,以及基于indexOf索引值的精简方案。
方法一:正则表达式封装
通过修改String原型对象,可以将正则表达式^(锚定开头)和$(锚定结尾)动态拼接,从而实现灵活的字符串检测。这是最直观且易于复用的方式。
// 定义以str开头的函数
String.prototype.startWith = function(str) {
var reg = new RegExp("^" + str);
return reg.test(this);
};
// 定义以str结尾的函数
String.prototype.endWith = function(str) {
var reg = new RegExp(str + "$");
return reg.test(this);
};
方法二:使用substr进行截取对比
substr允许直接获取指定位置长度的子串。逻辑上,如果取出的尾部子串与原目标字符串完全相等,则说明匹配成功。此方法包含对空值及长度溢出的健壮性检查。
<script type="text/javascript">
String.prototype.endWith = function(s) {
// 处理空字符串、目标字符串为空或目标比源串长的情况
if (s == null || s == "" || this.length == 0 || s.length > this.length)
return false;
// 截取末尾并对比
if (this.substring(this.length - s.length) == s)
return true;
else
return false;
};
String.prototype.startWith = function(s) {
if (s == null || s == "" || this.length == 0 || s.length > this.length)
return false;
// 截取头部固定长度并对比
if (this.substr(0, s.length) == s)
return true;
else
return false;
};
</script>
使用示例:
var url = location.href;
if (url.startWith('https://www.jb51.net')) {
// 当前页面位于指定域下
}
方法三:基于indexOf判断
indexOf用于查找子串在父串中首次出现的位置索引。若返回值为 0,则证明该子串从字符串的最开始处匹配,常用于判断开头。
var index = str.indexOf('abc');
if (index == 0) {
// 以'abc'开头
}
注意事项与建议
- 环境兼容性:上述原型扩展方法适用于所有支持JS的环境。但在现代开发中,强烈建议使用ES6引入的原生
startsWith()和endsWith()方法,其性能更优且无需污染全局String原型。 - 安全性:使用正则方法时,若搜索字符串包含特殊正则字符(如
*,?等),建议先进行转义处理,以免引发异常。
以上就是JavaScript中实现startsWith与endsWith方法的详细内容,更多关于字符串判定的技巧请持续关注本站相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













