gpt4 book ai didi

javascript - 是否存在允许正则表达式的 JavaScript 的 String.indexOf() 版本?

转载 作者:IT老高 更新时间:2023-10-28 13:14:46 26 4
gpt4 key购买 nike

在 javascript 中,是否存在等效于 String.indexOf() 的方法,它采用正则表达式而不是字符串作为第一个参数,同时仍然允许第二个参数?

我需要做类似的事情

str.indexOf(/[abc]/ , i);

str.lastIndexOf(/[abc]/ , i);

虽然 String.search() 将正则表达式作为参数,但它不允许我指定第二个参数!

编辑:
事实证明这比我最初想象的要难,所以我编写了一个小测试函数来测试所有提供的解决方案......它假设 regexIndexOf 和 regexLastIndexOf 已添加到 String 对象。

function test (str) {
var i = str.length +2;
while (i--) {
if (str.indexOf('a',i) != str.regexIndexOf(/a/,i))
alert (['failed regexIndexOf ' , str,i , str.indexOf('a',i) , str.regexIndexOf(/a/,i)]) ;
if (str.lastIndexOf('a',i) != str.regexLastIndexOf(/a/,i) )
alert (['failed regexLastIndexOf ' , str,i,str.lastIndexOf('a',i) , str.regexLastIndexOf(/a/,i)]) ;
}
}

我正在测试如下,以确保至少对于一个字符正则表达式,结果与我们使用 indexOf 的结果相同

//在xes中寻找a
测试('xxx');
测试('axx');
测试('xax');
测试('xxa');
测试('axa');
测试('xaa');
测试('aax');
测试('aaa');

最佳答案

String 构造函数的实例具有 .search() method它接受 RegExp 并返回第一个匹配项的索引。

要从特定位置开始搜索(伪造 .indexOf() 的第二个参数),您可以 slice 关闭第一个 i字符:

str.slice(i).search(/re/)

但这将获得较短字符串中的索引(在第一部分被切掉之后),因此您需要将切掉部分的长度 (i) 添加到返回的如果不是 -1 则为索引。这将为您提供原始字符串中的索引:

function regexIndexOf(text, re, i) {
var indexInSuffix = text.slice(i).search(re);
return indexInSuffix < 0 ? indexInSuffix : indexInSuffix + i;
}

关于javascript - 是否存在允许正则表达式的 JavaScript 的 String.indexOf() 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/273789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com