Me gustaría obtener la posición inicial de la 2nd
aparición de ABC
algo como esto:
var string = "XYZ 123 ABC 456 ABC 789 ABC";
getPosition(string, 'ABC', 2) // --> 16
¿Como lo harias?
javascript
Adán
fuente
fuente
nth
ocurrencia, en este caso la segunda.Respuestas:
fuente
fromIndex
argumento paraString.indexOf
function getPosition(str, m, i) { return str.split(m, i).join(m).length; }
i
ocurrencias 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 <= 0
enreturn 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
i
se 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.INSERT
yamysqli_real_escape_string
que 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
n
encuentran 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
indexOf
y 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