¿Cómo puedo contar la cantidad de veces que una cadena en particular ocurre en otra cadena? Por ejemplo, esto es lo que estoy tratando de hacer en Javascript:
var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
javascript
regex
string
TruMan1
fuente
fuente
Respuestas:
La
g
expresión regular (abreviatura de global ) dice buscar en toda la cadena en lugar de solo encontrar la primera aparición. Esto coincideis
dos veces:Y, si no hay coincidencias, devuelve
0
:fuente
count = (str.match(/is/g) || []).length
a manejar si no tienes una coincidencia.RegExp
constructor y pasando la cadena que está buscando, pero en ese caso debe escapar de todos los metacaracteres. En ese escenario, es preferible un enfoque de cadena pura.Uso
allowOverlapping
Partidos:
Prueba de unidad
Punto de referencia
Esenciafuente
substring.length
en casi todos los bucles, debería considerarwhile
occurrences(11,1) //2
y aún funcionaría. (Es más rápido hacerlo de esta manera en lugar de buscar tipos y llamar a String () )fuente
countInstances("isisisisisis", "is") === 0
.Puedes probar esto:
fuente
theString.split(myvar).length - 1
que no puede usar con expresiones regulares simplesMi solución:
fuente
countOcurrences('Hello...','.')==8
no 3Puede usar
match
para definir dicha función:fuente
return m ? m.length:-1;
.La versión no regex:
fuente
is
ocurrenciasSimplemente codifique el golf de la solución de Rebecca Chernoff :-)
fuente
Esto devolverá 2.
fuente
¡Aquí está la función más rápida!
¿Por qué es más rápido?
Todas las operaciones son tan combinadas como pueden ser, evitando ralentizaciones debido a múltiples operaciones
Aquí hay una versión más lenta y más legible:
Este es más lento debido al contador, los nombres largos de var y el mal uso de 1 var.
Para usarlo, simplemente haz esto:
Editar: (16/12/2013)
¡NO lo use con Opera 12.16 o anterior! ¡tomará casi 2.5 veces más que la solución regex!
En Chrome, esta solución tomará entre 14ms y 20ms para 1,000,000 de caracteres.
La solución de expresiones regulares tarda 11-14 ms por la misma cantidad.
Usar una función (afuera
String.prototype
) tomará aproximadamente 10-13 ms.Aquí está el código utilizado:
¡El resultado de todas las soluciones debería ser 100,000!
Nota: si desea que esta función cuente más de 1 carácter, cambie dónde está
c=(c+'')[0]
enc=c+''
fuente
fuente
Creo que el propósito de la expresión regular es muy diferente
indexOf
.indexOf
simplemente encuentre la aparición de una determinada cadena mientras que en la expresión regular puede usar comodines, lo[A-Z]
que significa que encontrará cualquier carácter en mayúscula en la palabra sin indicar el carácter real.Ejemplo:
fuente
Súper viejo, pero necesitaba hacer algo como esto hoy y solo pensé en verificar SO después. Funciona bastante rápido para mí.
fuente
Consulte: - cuente una subcadena aparece en la cadena para obtener una explicación paso a paso.
fuente
Sobre la base de @ Vittim.us respuesta anterior. Me gusta el control que me da su método, lo que facilita su extensión, pero necesitaba agregar mayúsculas y minúsculas y limitar las coincidencias a palabras completas con soporte para la puntuación. (por ejemplo, "bañarse" está en "bañarse" pero no en "bañarse")
La expresión regular de puntuación provino de: https://stackoverflow.com/a/25575009/497745 ( ¿Cómo puedo eliminar toda la puntuación de una cadena en JavaScript usando expresiones regulares? )
Siéntase libre de modificar y refactorizar esta respuesta si detecta errores o mejoras.
fuente
Para cualquiera que encuentre este hilo en el futuro, tenga en cuenta que la respuesta aceptada no siempre devolverá el valor correcto si lo generaliza, ya que se ahogará con operadores de expresiones regulares como
$
y.
. Aquí hay una versión mejor, que puede manejar cualquier aguja:fuente
Use get_occurrence (varS, string) para encontrar la ocurrencia de caracteres y cadenas en una cadena.
fuente
Intentalo
fuente
Versión simple sin expresiones regulares:
fuente
Nadie verá esto, pero es bueno recuperar las funciones de recursión y flecha de vez en cuando (juego de palabras gloriosamente intencionado)
fuente
Prueba esto
Enlace de violín: https://jsfiddle.net/rajaramtt/gn0dtsjc/1/
fuente
Ahora, este es un hilo muy antiguo que he encontrado, pero como muchos han enviado sus respuestas, aquí está el mío con la esperanza de ayudar a alguien con este código simple.
No estoy seguro de si es la solución más rápida, pero la prefiero por simplicidad y por no usar expresiones regulares (¡simplemente no me gusta usarlas!)
fuente
Esta función devuelve el número de apariciones de una palabra en el texto.
Tenga en cuenta que usamos toLowerCase para calcular el número de apariciones, independientemente del formato (mayúscula, mayúscula ...) de la palabra y el texto
fuente
Respuesta para Leandro Batista: solo un problema con la expresión regex.
fuente
fuente
Un poco tarde pero, suponiendo que tengamos la siguiente cadena:
Primero nos dividimos en lo que sea que esté buscando para que coincida, esto devolverá una serie de cadenas.
Luego obtenemos su longitud y le restamos 1, ya que los valores predeterminados divididos en una matriz de tamaño 1 y, en consecuencia, aumenta su tamaño cada vez que encuentra una ocurrencia.
También puede hacer todo esto en una línea de la siguiente manera:
Espero que ayude: D
fuente
Esta solución se basa en el
.replace()
método que acepta un RegEx como primer parámetro y una función como segundo parámetro que podemos usar como cierre para incrementar un contador ...Uso
fuente
encontré esta publicación.
El mismo algoritmo puede presentarse más corto:
fuente
substr_count
traducido a Javascript desde phpEcha un vistazo a la función substr_count de Locutus Translation of Php
fuente
Prueba esto:
fuente