JavaScript: How many times a character occurs in a string?
Use a RegEx to count the number of "a"s in a string.
var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';
document.write(string.match(/a/gi).length);
Let me explain how this works:
string.match
This is a RegEx method. It searches for the specified RegEx inside the specified string (in this case, the string "string").
(/a/gi)
This is the actual RegEx. It reads, "find the character a." It's very simple. It also carries two flags, the "g" and the "i". The "g" says to find ALL occurences of the character "a". Otherwise it would only find the first one, and it would never count past the number one. The second flag is "i". It makes the RegEx match all cases of that character. If that flag (i) was not there, the code above would only count 4, because it would skip the uppercase "A" in the string. Because of the "i", it will match upper and lower case. Remove the "i" if you you want to match letter case.
string.match
returns an array of all of the matches, so we use the length
method to retrieve the number of array entries. Simple as that!
This counts a
in below example:
str = "A man is as good as his word";
alert(str.split('a').length-1);
If you want case insensitive you'd want something like
alert(str.split( new RegExp( "a", "gi" ) ).length-1);
So that it grabs "A" and "a" ... "g" flag isn't really needed, but you do need the "i" flag
You could remove any other character in the string and check the length:
str.replace(/[^a]/g, "").length
Here it is counted how many a
s are in str
. The RegExp
is described below:
[ // Start Character Group
^ // Not operator in character group
a // The character "a"
] // End character group
In my opinion it is more convenient and safe to avoid regular expressions in this case
It's because if we want to be able to count any kind of characters then we need to consider two expressions. One for common characters and second for special characters for example like [
, ]
, ^
and so on. It's easy to forget about it, but even if we remember it, I think we're unnecessarily expanding our code.
In this case for string str
and character ch
works each of these solutions:
let count = str.split(ch).length - 1
(thanks to @Sarfraz)
or
let count = str.split('').filter(x => x == ch).length
or
let count = 0
str.split('').forEach(x => x == ch ? count++ : null)
Enjoy!