如何获得字符串中的第n次出现?

问题描述 投票:98回答:10

我想通过以下方式获取2nd出现ABC的开始位置:

var string = "XYZ 123 ABC 456 ABC 789 ABC";
getPosition(string, 'ABC', 2) // --> 16

你会怎么做?

javascript
10个回答
151
投票

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
)

-2
投票

我正在下面的代码中处理有关StackOverflow的另一个问题,并认为它可能适用于此。函数printList2允许使用正则表达式并按顺序列出所有出现的事件。 (printList是对较早解决方案的尝试,但在许多情况下失败。)


65
投票

您也可以使用字符串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
*/

18
投票

根据肯尼贝克的答案,我创建了一个原型函数,如果未找到第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;
}

4
投票

因为递归始终是答案。


2
投票

这是我的解决方案,它只遍历字符串,直到找到n个匹配项:


2
投票

此方法创建一个函数,该函数调用存储在数组中的第n次出现的索引


0
投票

使用indexOf递归


0
投票

使用[String.indexOf][1]


0
投票
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;
© www.soinside.com 2019 - 2024. All rights reserved.