Understanding Regular Expressions
it’s time to get over your fears of regular expressions(regex)! If you’re like me, you’ve heard of regex but have always been confused by the cryptic syntax. Fear not, because in the next 5 minutes, you’ll have a basic understanding of what’s going on and how to use RegEx to make your life easier!
So what are Regular Expressions ?
Basically, regular expressions are patterns that you can use to find matching patterns in strings. This could be useful for password validation, or checking if the formatting of input fields is correct, or perhaps you want to parse a phone number, etc…
How do you use them?
There are a couple ways of creating a regex, you can either use the literal version( which I prefer) or you can use the constructor option. The literal version looks like so:
const regEx = /hello/;
When making a regular expression literal, you place the pattern between two forward slashes. Above, we would be searching for the word ‘hello’.
Using the constructor would look something like this:
const regEx = new RegExp('hello');
I’m not the biggest fan of this, so moving forward I will only be using the literal version.
Testing Methods
How do you test your regex anyways? JavaScript provides us a couple of methods that are compatible with regular expressions:
- test()
- exec()
- match()
- matchAll()
- replace()
- search()
- split()
For my examples I will primarily be using test() and match(). Test is a RegExp method used to search a string and return either true or false if your pattern is found, and match is a string method that can use regex and returns the instances found in an array.
How to Match Strings
As you saw in my example above, I created the regex /hello/. This pattern would be useful for finding the first case sensitive instance of ‘hello’. What if you want to find every instance of ‘hello’, case insensitive? This is where ‘flags’ come in.
Flags act as modifiers to your regular expression. They go after the closing slash and there are five native flags in JavaScript!
- i : This makes your search case-insensitive!
- g : This flag tells your search to look for all matches, not just the first one.
- m : Multiline mode
- s : This enables “dotall” mode. It allows ‘.’ to match newlines
- u : Enables full unicode support
- y : sticky; it matches only from the index indicated by the lastIndex property of the regex in the target string.
So if we wanted to find every instance of ‘hello’ case insensitive, in the string “Hello heLLO hellO HELLO!”, we would do something like this:
let regex = /hello/gi;
let string = “Hello heLLO hellO HELLO!”;
string.match(regex);//returns [ 'Hello', 'heLLO', 'hellO', 'HELLO' ]
See that’s not so bad! Let’s look at another tool that’s very useful: character classes.
Character Classes
Character classes let you match a group of characters by placing them inside square brackets! This lets you find multiple matches with different characters. For example: if you wanted to find the words ‘big’, ‘bag’, ‘bog’, ‘bug’ in the string “The big bug crawled out of my bag and went into the bog.” you could use a simple regular expression to do so!
let string = “The big bug crawled out of my bag and went into the bog.”;let regex = /b[aiou]g/gi;
string.match(regex);//returns [ 'big', 'bug', 'bag', 'bog' ]
That’s pretty cool. You can also search for a range of characters inside of a character set using a hyphen ‘-’! For example, if I wanted to find every number in a string for some reason, I could do something like this:
let string = "I want 6 chocolates, 5 pop tarts, and 3 pumpkin pies please."let regex = /[0-9]/g;
string.match(regex);//returns [ '6', '5', '3' ]
You can do the above and so, so much more using Regular Expressions. You’ll find it’s basically like another language! This is just the tip of the iceberg, and I hope at least I’ve made regex a little less scary. There is so much more to regular expressions than I can cover here, but there are plenty of great resources to continue learning.
Happy Coding!