我想通过以下方式获取2nd
出现ABC
的开始位置:
var string = "XYZ 123 ABC 456 ABC 789 ABC";
getPosition(string, 'ABC', 2) // --> 16
你会怎么做?
const string = "XYZ 123 ABC 456 ABC 789 ABC";
function getPosition(string, subString, index) {
return string.split(subString, index).join(subString).length;
}
console.log(
getPosition(string, 'ABC', 2) // --> 16
)
我正在下面的代码中处理有关StackOverflow的另一个问题,并认为它可能适用于此。函数printList2允许使用正则表达式并按顺序列出所有出现的事件。 (printList是对较早解决方案的尝试,但在许多情况下失败。)
您也可以使用字符串indexOf而不创建任何数组。
第二个参数是开始寻找下一个匹配项的索引。
function nthIndex(str, pat, n){
var L= str.length, i= -1;
while(n-- && i++<L){
i= str.indexOf(pat, i);
if (i < 0) break;
}
return i;
}
var s= "XYZ 123 ABC 456 ABC 789 ABC";
nthIndex(s,'ABC',3)
/* returned value: (Number)
24
*/
根据肯尼贝克的答案,我创建了一个原型函数,如果未找到第n个事件而不是0,它将返回-1。>
String.prototype.nthIndexOf = function(pattern, n) {
var i = -1;
while (n-- && i++ < this.length) {
i = this.indexOf(pattern, i);
if (i < 0) break;
}
return i;
}
因为递归始终是答案。
这是我的解决方案,它只遍历字符串,直到找到n
个匹配项:
此方法创建一个函数,该函数调用存储在数组中的第n次出现的索引
使用indexOf
和递归
使用[String.indexOf][1]
function getStringReminder(str, substr, occ) {
let index = str.indexOf(substr);
let preindex = '';
let i = 1;
while (index !== -1) {
preIndex = index;
if (occ == i) {
break;
}
index = str.indexOf(substr, index + 1)
i++;
}
return preIndex;