JavaScript indexOf 方法详解与大小写忽略扩展实现
本文详细介绍JavaScript中indexOf方法的语法结构、参数含义及返回值规则,重点解析其区分大小写的特性。通过示例展示如何利用toLowerCase进行简单处理,并深入分析两种网络流传的忽略大小写查找扩展方案,包括正则匹配与兼容原有行为的实现逻辑,帮助开发者灵活处理字符串定位需求。
indexOf方法基础语法与参数说明
调用语法为:strObj.indexOf(str, startIndex[可选])
程序代码
其中strObj是必选项,代表String对象或字符串字面量。
str是必选项,表示需要在String对象中查找的目标子字符串。
startIndex是可选项,为一个整数值,指定在String对象内开始查找的起始位置,索引从0开始。若省略该参数,则默认从字符串起始位置开始查找。
注意:JavaScript的indexOf方法严格区分大小写。
JavaScript中indexOf方法返回一个整数值,表示String对象内子字符串的起始位置。若未找到匹配的字符串,则返回-1。若startIndex为负数,则将其视为0;若startIndex大于字符串最大字符位置索引,则将其视为最大可能索引。
indexOf函数的查找方向是从左向右执行。
以下示例演示了indexOf方法的基本用法。
基本用法示例
程序代码
var str1="fdiejDIFADF";
var str="e";
var i=str1.indexOf(str);
alert(i);
前文已提及,indexOf区分大小写,这有时会带来不便。最简单的解决方式是将字符通过toLowerCase或toUpperCase转换为统一的大小写形式后再进行比较。
代码如下:
忽略大小写的简单处理方案
程序代码
<script>
var Str = 'ABCDEF';
var Str1 = 'bcd';
alert(Str.toLowerCase().indexOf(Str1.toLowerCase()));
str2 = 'AbCdEf';
alert(Str2.toLowerCase().indexOf(Str1.toLowerCase()));
</script>
下面介绍一种利用正则表达式对indexOf进行扩展的方法(源自网络)。
基于正则的indexOf扩展实现
程序代码
<script>
String.prototype.indexOf = function(f,m){
var mm = (m == false) ? "i":"";
var re = eval("/"+ f +"/"+mm);
var rt = this.match(re);
return (rt == null) ? -1:rt.index;
}
var test = "absnegKIugfkalg";
alert(test.indexOf("kiu",false));
</script>
下面的扩展功能更为强大,它兼容原有的indexOf函数行为,同时支持忽略大小写的查找(同样源自网络)。
兼容原有行为的增强型扩展
程序代码
<script language="javascript">
String.prototype._indexOf = String.prototype.indexOf;
String.prototype.indexOf = function()
{
if(typeof(arguments[arguments.length - 1]) != 'boolean')
return this._indexOf.apply(this,arguments);
else
{
var bi = arguments[arguments.length - 1];
var thisObj = this;
var idx = 0;
if(typeof(arguments[arguments.length - 2]) == 'number')
{
idx = arguments[arguments.length - 2];
thisObj = this.substr(idx);
}
var re = new RegExp(arguments[0],bi?'i':'');
var r = thisObj.match(re);
return r==null?-1:r.index + idx;
}
}
alert("bcssssasdfsdf".indexOf('A',3,true));
alert("bcssssasdfsdf".indexOf('a',3));
</script>
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
为什么JS中typeof []返回object:数组类型检测误区解析
2026-11-04 19:50:47
D3.js 新手入门:环境搭建与第一个条形图实现
2026-11-04 10:49:48
