有兩個可以從字符串中查找子字符串的方法:indexOf()和lastIndexOf()。這兩個方法都是從一個字符串中搜索給定的子字符串,然后返子字符的位置(如果沒有找到該子字符串,則返回-1)。這兩個方法的區(qū)別在于:indexOf()方法從字符串的開頭向后搜索子字符串,而lastlndexOf()方法是從字符串的末尾向前搜索子字符串。還是來看一個例子吧:
var stringValue="hello world";
alert(stringValue.indexOf("o"));
alert(stringValue.lastIndexOf("o"));
子字符串”o”第一次出現(xiàn)的位置是4,即”hello”中的”o“;最后一次出現(xiàn)的位置是7,即”world”中的"o"。如果”o”在這個字符串中僅出現(xiàn)了一次,那么indexOf()和lastlndexOf()會返回相同的位置值。
南昌網(wǎng)站建公司技術(shù)員提醒大家indexOf是從0開始計算位置,而lastIndexOf是從1開始,包括空格.
這兩個方法都可以接收可選的第二個參數(shù),表示從字符串中的哪個位置開始搜索。換句話說,indexOf()會從該參數(shù)指定的位置向后搜索,忽略該位置之前的所有字符;而lastlndexOf()則會從指定的位置向前搜索,忽略該位置之后的所有字符??聪旅娴睦樱?
var stringValue="hello world";
alert(stringValue.indexOf("o",6));
alert(stringValue.lastIndexOf("o",6));
在第二個參數(shù)6傳遞給這兩個方法之后,得到了與前面例子相反的結(jié)果。這一次,由于indexOf()是從位置6(字母"w")開始向后搜索,結(jié)果在位置7找到了no”,因此它返回7。而lastlndexOf()是從位置6開始向前搜索。結(jié)果找到了”hello”中的”o”,因此它返回4。在使用第二個參數(shù)的情況下,
可以通過循環(huán)調(diào)用indexOf()或lastlndexOf()來找到所有匹配的子字符串,如下面的例子所示:
var stringValue = "BaiHeng Network engineers learning Javascript is a very happy thing";
var positions=new Array();
var pos=stringValue.indexOf("e");
while(pos>-1){
positions.push(pos);
pos=stringValue.indexOf("e",pos+1);
}
alert(positions); //"4,9,16,21,22,27,52"
這個例子通過不斷增加indexOf()方法開始查找的位置,遍歷了一個長字符串。在循環(huán)之外,首先找到了"e"在字符串中的初始位置;而進入循環(huán)后,則每次都給indexOf()傳遞上一次的位置加l。這樣,就確保了每次新搜索都從上一次找到的子字符串的后面開始。每次搜索返回的位置依次被保存在數(shù)組positions中,以便將來使用。