Regex is a very powerful tool, but its terse and cryptic vocabulary can make constructing and communicating them with others a challenge. Even developers who understand them well can have trouble reading their own back just a few months later! I am not good at Regex. During the seven years of my software engineer, I have never written a regex from scratch. I tried learning it a few times, seriously. But gradually, my regex memory is faded away.
Recently, I saw this awesome library super-expressive and I immediately love it. It provides a programmatic and human-readable way to create regular expressions. Its API uses the fluent builder pattern and is completely immutable. It’s built to be discoverable and predictable:
SuperExpressive().exactly(5).digit
)index.d.ts
file for full TypeScript supportSuperExpressive turns those complex and unweildy regexes that appear in code reviews into something that can be read, understood, and properly reviewed by your peers - and maintained by anyone!
Quoted from the library README
npm i super-expressive
const SuperExpressive = require('super-expressive')
// Or as an ES6 module
import SuperExpressive from 'super-expressive'
The following example recognizes the HTTP protocol or some added string inside the list of URLs.
const SuperExpressive = require('super-expressive')
const httpRegex = SuperExpressive()
.allowMultipleMatches.anyOf.string('http')
.string('nartc')
.string('jira')
.end()
.toRegex()
// Produces the following regular expression:
;/(?:http|nartc|jira)/g
You can immediately use the httpRegex
variable to test against your input string and that’s it. The code is much more readable and maintainable.
It is just a simple example, usually regex will be much more complex. You can check the full list of the API
If you need a regex for validation purposes on Angular and you don’t want to install super-expressive, that’s fine. My friend @nartc built a playground online where you can simply generate your regex using super-expressive syntax and test your result as well.
Check out the working app -> https://sepg.netlify.app/
I contributed to the responsiveness of the application on the mobile web browser.
If you like it, give a star to my friend repo yeah! 💪💪💪