Count the Number of Regex Matches using JavaScript

avatar

Borislav Hadzhiev

Last updated: Sep 7, 2022

banner

Photo from Unsplash

Count the Number of Regex Matches #

To count the number of regex matches, call the match() method on the string, passing it the regular expression as a parameter, e.g. (str.match(/[a-z]/g) || []).length. The match method returns an array of the regex matches or null if there are no matches found.

index.js
const str = 'one two one one'; const count = (str.match(/one/g) || []).length; console.log(count); // 👉️ 3

The only parameter the String.match method takes is a regular expression.

The forward slashes / / mark the beginning and end of the regular expression.

In the example, we search for the substring one.

If you need a regex cheatsheet, check out this one from MDN.

Notice that we used the g (global) flag after the regex. The g flag allows us to match all occurrences of the regular expression in the string and not just the first occurrence.

If no matches of the regex are found in the string, the match method returns null.

We handle this scenario, by using the logical OR (||) operator. We don't want to access the length property on a null value because we'd get an error.

index.js
const str = 'one two one one'; const count = (str.match(/one/g) || []).length; console.log(count); // 👉️ 3

The logical OR (||) operator allows us to return an empty array if the match method returns null.

The logical OR (||) operator returns the value to the left if it's truthy, otherwise it returns the value to the right.

The truthy values in JavaScript are all values that are not falsy. The falsy values are: null, undefined, false, 0, "" (empty string), NaN (not a number).

Here are some examples of commonly used regular expressions.

index.js
// ✅ Any digit 0-9 const str = '123 hello 123'; const count = (str.match(/[0-9]/g) || []).length; console.log(count); // 👉️ 6 // ✅ Any Alphanumeric character const str2 = '123 hello !@#$%^&'; const count2 = (str2.match(/[a-zA-Z0-9]/g) || []).length; console.log(count2); // 👉️ 8 // ✅ Any latin letters const str3 = 'Hello 123'; const count3 = (str3.match(/[a-zA-Z]/g) || []).length; console.log(count3); // 👉️ 5 // ✅ Occurrences of a, b or c const str4 = 'abc123abc'; const count4 = (str4.match(/[abc]/g) || []).length; console.log(count4); // 👉️ 6

The square brackets in the regular expression allow us to match ranges e.g. digit ranges - [0-9], or letter ranges - [a-zA-Z].

They also allow us to match either one of multiple characters, e.g. [abc] matches a, b, or c.

Make sure you use the g (global) flag because if you don't, the regex would match only the first occurrence.

Further Reading #

I wrote a book in which I share everything I know about how to become a better, more efficient programmer.
book cover
You can use the search field on my Home Page to filter through all of my articles.