Existe uma maneira simples de verificar quantas vezes um caractere aparece em uma String?
javascript
string
Ruth
fonte
fonte
Respostas:
Você pode remover qualquer outro caractere da string e verificar o comprimento:
str.replace(/[^a]/g, "").length
Aqui é contado quantos
a
s estão dentrostr
.fonte
let xLength = str.replace(/[^a || A]/g, "").length;
let xLength = str.replace(/[^aA]/g, "").length;
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"
fonte
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.match
Este é 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.match
retorna uma matriz de todas as correspondências, portanto, usamos olength
método para recuperar o número de entradas da matriz. Simples assim!fonte
a
" emstring
, entãostring.match(/a/gi)
é igual anull
e você obteve o erroCannot read property 'length' of null
.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
str
e caráterch
funciona 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!
fonte
var s = "dqsskjhfds"; alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string
fonte
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);
fonte