¿Existe una forma sencilla de comprobar cuántas veces aparece un personaje en una cadena?
javascript
string
Piedad
fuente
fuente
Respuestas:
Puede eliminar cualquier otro carácter de la cadena y comprobar la longitud:
str.replace(/[^a]/g, "").length
Aquí se cuenta cuántos
a
s haystr
.fuente
let xLength = str.replace(/[^a || A]/g, "").length;
let xLength = str.replace(/[^aA]/g, "").length;
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"
fuente
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.match
Este 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.match
devuelve una matriz de todas las coincidencias, por lo que usamos ellength
método para recuperar el número de entradas de la matriz. ¡Simple como eso!fuente
a
" enstring
, entoncesstring.match(/a/gi)
es igualnull
y tiene un errorCannot read property 'length' of null
.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
str
y caracteresch
funciona 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!
fuente
var s = "dqsskjhfds"; alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string
fuente
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);
fuente