JavaScript: quantas vezes um caractere ocorre em uma string?

Respostas:

82

Você pode remover qualquer outro caractere da string e verificar o comprimento:

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

Aqui é contado quantos as estão dentro str.

quiabo
fonte
1
Só quero salientar que você também pode contabilizar letras maiúsculas fazendo let xLength = str.replace(/[^a || A]/g, "").length;
HappyHands31
@ HappyHands31 Você quer dizerlet xLength = str.replace(/[^aA]/g, "").length;
Pato Donald
46

Isso conta a no exemplo abaixo:

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

Se você quiser não diferenciar maiúsculas de minúsculas, deve usar algo como

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

Para que pegue "A" e "a" ... a sinalização "g" não é realmente necessária, mas você precisa da sinalização "i"

Sarfraz
fonte
1
@Josh Depende do que todos gostam. Por exemplo, gosto desta resposta porque é fácil de ler. Mas outra pessoa vai preferir outra resposta por ser mais técnica, ou desafiadora, outra pessoa vai preferir outra resposta porque está consumindo menos cpu e assim por diante ... é por isso que o JavaScript é tão bom, um gostinho de liberdade.
vdegenne,
21

Use um RegEx para contar o número de "a" s em uma string.

var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';

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

Deixe-me explicar como isso funciona:

string.matchEste é um método RegEx. Ele procura o RegEx especificado dentro da string especificada (neste caso, a string "string").

(/a/gi)Este é o RegEx real. Diz, "encontre o caractere a." É muito simples. Ele também carrega dois sinalizadores, o "g" e o "i". O "g" diz para encontrar TODAS as ocorrências do caractere "a". Caso contrário, ele encontraria apenas o primeiro e nunca passaria do número um. O segundo sinalizador é "i". Isso faz com que o RegEx corresponda a todos os casos desse caractere. Se esse sinalizador (i) não estivesse lá, o código acima contaria apenas 4, porque ignoraria o "A" maiúsculo na string. Por causa do "i", ele corresponderá a maiúsculas e minúsculas. Remova o "i" se quiser fazer a correspondência entre maiúsculas e minúsculas.

string.matchretorna uma matriz de todas as correspondências, portanto, usamos o lengthmétodo para recuperar o número de entradas da matriz. Simples assim!

Drazzah
fonte
Acho que você deveria remover o i do kimono, é uma fonte de erros. Você pode adicioná-lo como um bônus, mas no meu caso, eu estava procurando especificamente por correspondência com distinção entre maiúsculas e minúsculas.
Gismo Ranas
2
o problema aqui é que se você não tiver " a" em string, então string.match(/a/gi)é igual a nulle você obteve o erro Cannot read property 'length' of null.
pbialy
1
A parte do 'kimono' ajudou muito, Sir @Drazzah
Jason Sebring
15

Na minha opinião é mais conveniente e seguro evitar expressões regulares neste caso

É porque se quisermos ser capazes de contar qualquer tipo de caractere, precisamos considerar duas expressões. Um para comuns personagens e segundo para especiais caracteres, por exemplo, como [, ], ^e assim por diante. É fácil esquecer isso, mas mesmo que nos lembremos, acho que estamos expandindo nosso código desnecessariamente.

Em caso de corda stre caráter chfunciona cada uma destas soluções:

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

(obrigado a @Sarfraz )

ou

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

ou

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

Apreciar!

simhumileco
fonte
4
var s = "dqsskjhfds";
alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string
Darin Dimitrov
fonte
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.
fonte
1
Embora seu trecho de código possa resolver o problema, você deve descrever qual é o propósito do seu código (como ele resolve o problema). Além disso, você pode querer verificar stackoverflow.com/help/how-to-answer
Ahmad F
@AhmadF você pode usar isso para> Quantas vezes um caractere ocorre em uma string. e ao executar esse script, você obterá um objeto com propriedades (caracteres) que ocorre mais de uma vez.
Nitin.