在JavaScript编写中,熟悉了对字符串的查找操作,但是有一点就不会了,反向查找怎么操作呢,有没有此操作的方法呢
已知,正向查找一般都用以下方法
String.indexOf(searchString)
String.search(regexp)
反向查找的呢,只有这一个方法
String.lastIndexOf(searchString)
传参数要是正则表达式的话,那是目前没有的,
于是,自己就动手写了一个可用的方法
/**
* 查找最后一个出现的位置
* @param String - text 字符串
* @param RegExp - 正则表达式 或 搜索字符串
* @param Number - 限定为搜索字符串长度以上 加上限定可提高查找速度 默认0无限制
*/
function lastSearch(text,regexp,length=0) {
if(!(regexp instanceof RegExp)) regexp = new RegExp(regexp);
let e = -1;
let i=text.length-length-1;
for(; i>=0; i--){
let l = text.substring(i,length>0?i+length:text.length);
if(l.search(regexp)==0) {
e=i;
break;
}
}
return e;
}
来看一下
lastSearch()
的使用例子,反向查找符合条件的字符串\wo\wl
let text = 'hello world, welcome use...';
let searchString = 'o';
let reg = /\wo\wl/;
//let location = lastIndexOf(text,searchString,searchString.length);
let location = lastSearch(text,reg);
console.log(text.substring(0,location));
打印输出的结果,是
hello
,没错吧?
有发现,用正则表达式,由于无法判断搜索字符串长度,用此方法不传限定长度的话是比较耗时的