JavaScript: ¿Cuántas veces aparece un carácter en una cadena?

Respuestas:

76

Puede eliminar cualquier otro carácter de la cadena y comprobar la longitud:

str.replace(/[^a]/g, "").length

Aquí se cuenta cuántos as hay str.

Gumbo
fuente
1
Solo quiero señalar que también puede tener en cuenta las mayúsculas al hacerlo let xLength = str.replace(/[^a || A]/g, "").length;
HappyHands31 de
@ HappyHands31 Quieres decirlet xLength = str.replace(/[^aA]/g, "").length;
Donald Duck
43

Esto cuenta a en el siguiente ejemplo:

str = "A man is as good as his word";
alert(str.split('a').length-1);

Si quieres que no distingan entre mayúsculas y minúsculas, querrás algo como

alert(str.split( new RegExp( "a", "gi" ) ).length-1);

Para que tome "A" y "a" ... "g" no es realmente necesario, pero sí necesita el indicador "i"

Sarfraz
fuente
1
@Josh Depende de lo que le guste a todos. Por ejemplo, me gusta esta respuesta porque es fácil de leer. Pero alguien más preferirá otra respuesta porque es más técnica o desafiante, otra persona preferirá otra respuesta porque consume menos CPU y así sucesivamente ... por eso JavaScript es tan agradable, una muestra de libertad.
vdegenne
18

Utilice una expresión regular para contar el número de "a" en una cadena.

var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';

document.write(string.match(/a/gi).length);

Déjame explicarte cómo funciona esto:

string.matchEste es un método RegEx. Busca la expresión regular especificada dentro de la cadena especificada (en este caso, la cadena "cadena").

(/a/gi)Esta es la expresión regular real. Dice, "encuentra el carácter a". Es muy simple. También lleva dos banderas, la "g" y la "i". La "g" dice que busque TODAS las ocurrencias del carácter "a". De lo contrario, solo encontraría el primero y nunca pasaría del número uno. La segunda bandera es "i". Hace que la expresión regular coincida con todos los casos de ese carácter. Si ese indicador (i) no estuviera allí, el código anterior solo contaría 4, porque omitiría la "A" mayúscula en la cadena. Debido a la "i", coincidirá con mayúsculas y minúsculas. Quite la "i" si desea que coincida con la letra mayúscula.

string.matchdevuelve una matriz de todas las coincidencias, por lo que usamos el lengthmétodo para recuperar el número de entradas de la matriz. ¡Simple como eso!

Drazzah
fuente
Creo que debería eliminar la i de gi, es una fuente de errores. Puede agregarlo como un bono, pero en mi caso estaba buscando específicamente una coincidencia sensible a mayúsculas y minúsculas.
Gismo Ranas
1
el problema aquí es que si no tiene " a" en string, entonces string.match(/a/gi)es igual nully tiene un error Cannot read property 'length' of null.
pbialy
1
La parte 'gi' fue muy útil, Sir @Drazzah
Jason Sebring
11

En mi opinión es más conveniente y seguro evitar las expresiones regulares en este caso

Es porque si queremos poder contar cualquier tipo de caracteres, debemos considerar dos expresiones. Uno para caracteres comunes y el segundo para caracteres especiales , por ejemplo [, como ], ^y así sucesivamente. Es fácil olvidarlo, pero incluso si lo recordamos, creo que estamos expandiendo innecesariamente nuestro código.

En este caso, para cadenas stry caracteres chfunciona cada una de estas soluciones:

let count = str.split(ch).length - 1

(gracias a @Sarfraz )

o

let count = str.split('').filter(x => x == ch).length

o

let count = 0
str.split('').forEach(x => x == ch ? count++ : null)

¡Disfrutar!

simhumileco
fuente
4
var s = "dqsskjhfds";
alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string
Darin Dimitrov
fuente
1
var a = "acvbasbb";
var b= {};
for (let i=0;i<a.length;i++){
    if((a.match(new RegExp(a[i], "g"))).length > 1){
        b[a[i]]=(a.match(new RegExp(a[i], "g"))).length;
    }
}
console.log(b);
Nitin.
fuente
1
Aunque su fragmento de código podría resolver el problema, debe describir cuál es el propósito de su código (cómo resuelve el problema). Además, es posible que desee consultar stackoverflow.com/help/how-to-answer
Ahmad F
@AhmadF puede usar esto para> Cuántas veces aparece un carácter en una cadena. y cuando ejecute este script obtendrá un objeto con propiedades (caracteres) que ocurre más de una vez.
Nitin.