JavaScript用indexOf()在字符串数组中查找子串时需要注意的一个地方

一、遇到问题

在 继续更新完善:C++ 结构体代码转MASM32代码  中,由于结构体成员中可能为数组类型的情况,因此我们在提取结构体成员信息的过程中,需要检测结构体成员名称字符串中是否包括 [],如果包括那么我们要截取'['前面的内容作为成员名称。

在用字符串的indexOf()方法检测和定位'['时,发现对字符串数组无效,即使字符串数组元素值中包括'[',但返回值仍是-1。

深入分析后,找到了原因。

二、实例分析

我们通过下面这个例子来说明:

<!DOCTYPE html>
<html>
<body>

<script>

document.write("<strong>在字符串中查找'['</strong><br>");
var str="MIB_ TCP6ROW OWNER MODULE\ttable[ANY _SIZE]";
document.write('str="',str,'"',"<br>str.indexOf('[')=",str.indexOf('[')+"<br><br>"); // 在字符串中查找'['
document.write("<br><strong>在字符串数组中查找'['</strong><br>");
var a = str.split('\t');
document.write('a="', a, '"<br>',"a.indexOf('[')=",a.indexOf('[')+"<br>"); // 在字符串数组中查找'['

for (var i=0; i < a.length; i++)  
{
    document.write('<br>a[',i,'] ="', a[i], '"<br>',"a[",i,"].indexOf('[')=",a[i].indexOf('[')+"<br>"); // 在字符串数组中查找'['

}
</script>

</body>
</html>

输出结果如下:

在字符串中查找'['
str="MIB_ TCP6ROW OWNER MODULE table[ANY _SIZE]"
str.indexOf('[')=31


在字符串数组中查找'['
a="MIB_ TCP6ROW OWNER MODULE,table[ANY _SIZE]"
a.indexOf('[')=-1

a[0] ="MIB_ TCP6ROW OWNER MODULE"
a[0].indexOf('[')=-1

a[1] ="table[ANY _SIZE]"
a[1].indexOf('[')=5

在上面的例子中,对于字符串变量str,可以用indexOf()来查找子串,所以str.indexOf('[')可以直接定位到31。

当我们用split()方法把字符串str的值分割为数组a后,尽管数组a的值是"MIB_ TCP6ROW OWNER MODULE,table[ANY _SIZE]",但直接对数组名a使用indexOf()查找子串无效,返回值总是-1。

所以正确的处理方式是对数组a中的元素逐个进行搜索。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫郢剑侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值