Eu gostaria de obter a posição inicial da 2nd
ocorrência de ABC
com algo assim:
var string = "XYZ 123 ABC 456 ABC 789 ABC";
getPosition(string, 'ABC', 2) // --> 16
Como você faria?
javascript
Adão
fonte
fonte
nth
ocorrência, neste caso a segunda.Respostas:
fonte
fromIndex
argumento paraString.indexOf
function getPosition(str, m, i) { return str.split(m, i).join(m).length; }
i
ocorrências dem
. Ou seja,getPosition("aaaa","a",5)
dá4
, como dágetPosition("aaaa","a",72)
! Acho que você quer -1 nesses casos.var ret = str.split(m, i).join(m).length; return ret >= str.length ? -1 : ret;
Você também pode querer pegari <= 0
comreturn ret >= str.length || i <= 0 ? -1 : ret;
Você também pode usar a string indexOf sem criar nenhuma matriz.
O segundo parâmetro é o índice para começar a procurar a próxima correspondência.
fonte
i
pode ser menos confuso:var i; for (i = 0; n > 0 && i !== -1; n -= 1) { i = str.indexOf(pat, /* fromIndex */ i ? (i + 1) : i); } return i;
Trabalhando com a resposta de Kennebec, criei uma função de protótipo que retornará -1 se a enésima ocorrência não for encontrada em vez de 0.
fonte
String.prototype.nth_index_of
. Mesmo se você achar que seu nome é único e louco o suficiente, o mundo vai provar que ele pode e vai ficar ainda mais louco.INSERT
comomysqli_real_escape_string
se não proteger contra hacks aspas simples. Grande parte da programação profissional não consiste apenas em ter bons hábitos, mas também em compreender por que tais hábitos são importantes. :-)Porque a recursão é sempre a resposta.
fonte
~
) é o operador NOT bit a bit em JavaScript: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Esta é minha solução, que apenas itera sobre a string até que as
n
correspondências sejam encontradas:fonte
Este método cria uma função que chama o índice de enésimas ocorrências armazenadas em uma matriz
fonte
Caminho mais curto e acho mais fácil, sem criar strings desnecessárias.
fonte
Usando
indexOf
e recursão :Primeiro verifique se a enésima posição passada é maior do que o número total de ocorrências de substring. Se passado, percorre recursivamente cada índice até que o enésimo seja encontrado.
fonte
Usando
[String.indexOf][1]
fonte
fonte
Eu estava brincando com o código a seguir para outra pergunta no StackOverflow e pensei que poderia ser apropriado para aqui. A função printList2 permite o uso de uma regex e lista todas as ocorrências em ordem. (printList foi uma tentativa de uma solução anterior, mas falhou em vários casos.)
fonte