Writing regex is not that difficult, I know, But without a doubt, it's one of the most boring tasks in the world, and if you don't understand it, it's super frustrating. So today I present to you, magic-regexp
This library allows you to create regular expressions with a very natural and intuitive syntax.
First, we need to install it
npm install magic-regexp
Now, let's create an array where we can test our expressions
const stringsToParse = [
"id: 123",
"there is no id",
"random string id: 1",
"[INFO] id: 12",
"id: 1a",
"random log info id: 4b93H6Hd random log",
"id: 4b93H6Hd"
]
First case
Our first case will be a simple one, just match the string "id: "
import { createRegExp, exactly } from 'magic-regexp'
const regex = createRegExp(
exactly('id: ')
)
We can see that almost all the strings matched our regex, only the second one didn't contain the exact string "id: ".
Second case
Let's do something more complicated. Let's find the word "id: " again, but now we also want it to be followed by a letter or digit, and to be between 2 and 6 in length.
import { createRegExp, exactly, letter, digit } from 'magic-regexp'
const regex = createRegExp(
exactly('id: ')
.and(letter.or(digit).times.between(2, 6))
)
As you can see, the third word didn't match because the number after the id contains only one letter/digit.
Third case
So, let's add one more thing here, the .at.lineStart(). As the name says, it will only care about the string where your condition is at the beginning.
import { createRegExp, exactly, letter, digit } from 'magic-regexp'
const regex = createRegExp(
exactly('id: ')
.at.lineStart()
.and(letter.or(digit).times.between(2, 6))
)
As you can see, only those matching the previous conditions and those starting with our "id: " match the condition.
Fourth case
Let's push things a little further. Let's add the .at.lineEnd(). As the name says, it will only look for those that are at the end of the line. Notice that we put this inside the and() function.
import { createRegExp, exactly, letter, digit } from 'magic-regexp'
const regex = createRegExp(
exactly('id: ')
.at.lineStart()
.and(letter.or(digit).times.between(2, 6).at.lineEnd())
)
With this particular condition, only two strings satisfy the condition.
Summary
As you can see, writing regular expressions with a more natural language is a lot easier if you don't have experience with regex. There are many more things that you can do with this library, you can check directly the documentation.
A big inspiration for this post, came from this Youtube Video, so check it if you want something more visual :)
That's all, I hope it can be helpful for you ๐ฅณ




Top comments (0)