/betteregex

Write better, more readable regexes

Primary LanguageTypeScriptGNU General Public License v3.0GPL-3.0

betteregex

GitHub contributors Snyk Vulnerabilities for GitHub Repo npm bundle size npm downloads License Code style XO

Credit to @Hashbrown777 on GitHub for the idea and the original implementation

betteregex is a tool that allows regex pros to do write cleaner, more understandable regexes. Write regexes without worrying about:

  • double backslashing (just write "\d" instead of "\\d")
  • adding whitespace for readability
  • adding comments
// Comparing two ways of writing RFC2822-like email validation regex

// The normal way: small but cryptic
const emailRegex = /[a-z\d!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z\d!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z\d](?:[a-z\d-]*[a-z\d])?\.)+[a-z\d](?:[a-z\d-]*[a-z\d])?/g

// The betteregex way: longer but straightforward
const { regex } = require('betteregex')
const anythingAllowedInEmail = '[a-z0-9!#$%&\'*+/=?^_`{|}~-]+';

const emailRegex = regex`
	// Match one or more alphabet, numbers, one of allowed special characters or tildes
	${anythingInEmailRegex}

	// Open group
	(?:
		// Match a dot if any
		\.
		// Same as before
		${anythingInEmailRegex}
	// Close group, match one or more greedy
	)*
	
	// The @
	@
	
	// Open group
	(?:
		// Provider name (gmail etc.)
		[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
		// The dot
		\.
	// Close group
	)+
	
	/*
		The ending extension
		May not match everything becauseextensions are (mostly) letters
	*/
	[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
${'g'}`

Prerequisites

Before you begin, make sure you have installed NodeJS.

Installation

Install using npm:

$ npm i betteregex

Usage

const {regex} = require("betteregex")

const exp = regex`
	// Your regex here
	// Example:
	\d+\w\s

	.*
`

For more info, read the documentation

License

THis project is licensed under GNU GPL 3.0