Me gustaría obtener la posición inicial de la 2ndaparición de ABCalgo como esto:
var string = "XYZ 123 ABC 456 ABC 789 ABC";
getPosition(string, 'ABC', 2) // --> 16
¿Como lo harias?
javascript
Adán
fuente
fuente

nthocurrencia, en este caso la segunda.Respuestas:
fuente
fromIndexargumento paraString.indexOffunction getPosition(str, m, i) { return str.split(m, i).join(m).length; }iocurrencias dem. Es decir,getPosition("aaaa","a",5)da4, como hacegetPosition("aaaa","a",72)! Creo que quieres -1 en esos casos.var ret = str.split(m, i).join(m).length; return ret >= str.length ? -1 : ret;También es posible que desee ponersei <= 0enreturn ret >= str.length || i <= 0 ? -1 : ret;También puede utilizar la cadena indexOf sin crear matrices.
El segundo parámetro es el índice para comenzar a buscar la siguiente coincidencia.
fuente
ise puede hacer menos confuso:var i; for (i = 0; n > 0 && i !== -1; n -= 1) { i = str.indexOf(pat, /* fromIndex */ i ? (i + 1) : i); } return i;Trabajando con la respuesta de kennebec, creé una función prototipo que devolverá -1 si no se encuentra la enésima aparición en lugar de 0.
fuente
String.prototype.nth_index_of. Incluso si crees que tu nombre es único y lo suficientemente loco, el mundo demostrará que puede hacerlo y lo hará más loco.INSERTyamysqli_real_escape_stringque no protege contra ataques de comillas simples. Gran parte de la codificación profesional no se trata solo de tener buenos hábitos, sino también de comprender por qué dichos hábitos son importantes. :-)Porque la recursividad es siempre la respuesta.
fuente
~) es el operador NOT bit a bit en JavaScript: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Aquí está mi solución, que solo itera sobre la cadena hasta que se
nencuentran coincidencias:fuente
Este método crea una función que llama al índice de enésimas ocurrencias almacenadas en una matriz
fuente
Forma más corta y creo que más fácil, sin crear cadenas innecesarias.
fuente
Uso
indexOfy recursividad :Primero verifique si la enésima posición pasada es mayor que el número total de ocurrencias de subcadenas. Si se aprueba, recorra de forma recursiva cada índice hasta encontrar el enésimo.
fuente
Utilizando
[String.indexOf][1]fuente
fuente
Estaba jugando con el siguiente código para otra pregunta sobre StackOverflow y pensé que podría ser apropiado aquí. La función printList2 permite el uso de una expresión regular y enumera todas las ocurrencias en orden. (printList fue un intento de una solución anterior, pero falló en varios casos).
fuente