Human-friendly regular expression builder with English-like syntax.
🧩 Intuitive builder pattern with chainable methods
🎯 Prebuilt validators for common patterns (emails, URLs, phone numbers)
📚 Comprehensive character classes and quantifiers
🛡️ Type-safe implementation with TypeScript
⚡ Memoized patterns for better performance
🔍 Supports all standard regex flags
import { createRegex } from "human-regex" ;
// Password validation: 8+ chars with special character, digit, and letter
const passwordRegex = createRegex ( )
. startAnchor ( )
. hasSpecialCharacter ( )
. hasDigit ( )
. hasLetter ( )
. anyCharacter ( )
. atLeast ( 8 )
. endAnchor ( )
. toRegExp ( ) ;
console . log ( passwordRegex . test ( "P@ssw0rd" ) ) ; // true
import { Patterns } from "human-regex" ;
// Email validation
console . log ( Patterns . email ( ) . test ( "test@example.com" ) ) ; // true
// International phone number
console . log ( Patterns . phoneInternational ( ) . test ( "+123-4567890" ) ) ; // true
// URL validation
console . log ( Patterns . url ( ) . test ( "https://www.example.com/path" ) ) ; // true
Comprehensive API Reference
Creates a new regex builder instance.
Method
Description
Example Output
.digit()
Adds a digit pattern (\d).
\d
.word()
Adds a word character pattern (\w).
\w
.whitespace()
Adds a whitespace character pattern (\s).
\s
.nonWhitespace()
Adds a non-whitespace character pattern (\S).
\S
.anyCharacter()
Adds a pattern for any character (.).
.
.literal("text")
Adds a literal text pattern.
["text"]
.or()
Adds an OR pattern.
|
.newline()
Adds a pattern for newline characters.
(\r\n|\r|\n)
.range("digit")
Adds a range pattern for digits (0-9).
[0-9]
.notRange("letter")
Adds a range pattern for non-letters
[^a-zA-Z]
.anyOf("aeiou\\s")
Adds list of accepted characters
[aeiou\s]
.notAnyOf("aeiou\\s")
Adds list of excluded characters
[^aeiou\s]
Method
Description
Example Output
.exactly(n)
Adds an exact quantifier ({n}).
{n}
.atLeast(n)
Adds a minimum quantifier ({n,}).
{n,}
.atMost(n)
Adds a maximum quantifier ({0,n}).
{0,n}
.between(min, max)
Adds a range quantifier ({min,max}).
{min,max}
.oneOrMore()
Adds a one-or-more quantifier (+).
+
.optional()
Adds an optional quantifier (?).
?
.zeroOrMore()
Adds a zero-or-more quantifier (*).
*
.lazy()
Makes the previous quantifier lazy.
?
.repeat(count)
Repeats the previous pattern exactly count times.
{count}
Method
Description
Example Output
.startGroup()
Starts a non-capturing group ((?:).
(?:
.startCaptureGroup()
Starts a capturing group (().
(
.startNamedGroup("name")
Starts a named capturing group.
(?<name>
.endGroup()
Ends a group ()).
)
.startAnchor()
Adds a start anchor (^).
^
.endAnchor()
Adds an end anchor ($).
$
.wordBoundary()
Adds a word boundary assertion (\b).
\b
.nonWordBoundary()
Adds a non-word boundary assertion (\B).
\B
Method
Description
Example Output
.hasSpecialCharacter()
Adds a lookahead for special characters.
(?=.*[!@#$%^&*])
.hasDigit()
Adds a lookahead for digits.
(?=.*\d)
.hasLetter()
Adds a lookahead for letters.
(?=.*[a-zA-Z])
Method
Description
Example Output
.protocol()
Adds a protocol pattern (https?://).
https?://
.www()
Adds a www pattern ((www\.)?).
(www\.)?
.path()
Adds a path pattern ((/\w+)*).
(/\w+)*
.tld()
Adds a top-level domain pattern.
["(com|org|net)"]
Method
Description
Example Output
.global()
Adds the global flag (g).
g
.nonSensitive()
Adds the case-insensitive flag (i).
i
.multiline()
Adds the multiline flag (m).
m
.dotAll()
Adds the dot-all flag (s).
s
.sticky()
Adds the sticky flag (y).
y
Method
Description
Example Output
.unicodeChar()
Matches Unicode characters.
\p{L}
.unicodeDigit()
Matches Unicode digits.
\p{N}
.unicodePunctuation()
Matches Unicode punctuation.
\p{P}
.unicodeSymbol()
Matches Unicode symbols.
\p{S}
Patterns.email: Predefined email pattern.
Patterns.url: Predefined URL pattern.
Patterns.phoneInternational: Predefined international phone number pattern.
For use with range() and notRange():
digit: "0-9",
lowercaseLetter: "a-z",
uppercaseLetter: "A-Z",
letter: "a-zA-Z",
alphanumeric: "a-zA-Z0-9",
anyCharacter: ".",
RangeKey
Range value
digit
0-9
lowercaseLetter
a-z
uppercaseLetter
A-Z
letter
a-zA-Z
alphanumeric
a-zA-Z0-9
anyCharacter
.
Combining with Existing Regex
const basePattern = / ^ [ A - Z ] / ;
const combined = createRegex ( ) . regex ( basePattern ) . digit ( ) . exactly ( 3 ) . toRegExp ( ) ;
createRegex ( ) . literal ( "(?<=@)" ) . word ( ) . oneOrMore ( ) . toRegExp ( ) ;
createRegex ( )
. literal ( "(?<year>\\d{4})" )
. literal ( "-" )
. literal ( "(?<month>\\d{2})" )
. toRegExp ( ) ;
We welcome contributions! Please follow the guidelines in CONTRIBUTING.md .
This project is licensed under the MIT License - see the LICENSE file for details.