【JavaScript】类似lastIndexOf方法用正则表达式反向查找

在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 ,没错吧?
有发现,用正则表达式,由于无法判断搜索字符串长度,用此方法不传限定长度的话是比较耗时的

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TA远方

谢谢!收到你的爱╮(╯▽╰)╭

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

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

打赏作者

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

抵扣说明:

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

余额充值