
Security News
Re-Enabled GitHub Actions Expose Thousands of Repositories to Mini Shai-Hulud
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.
human-regex
Advanced tools
Human-friendly regular expression builder with English-like syntax.
npm install human-regex
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
createRegex()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 | . |
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.
FAQs
Human-friendly regex builder with English-like syntax
The npm package human-regex receives a total of 0 weekly downloads. As such, human-regex popularity was classified as not popular.
We found that human-regex demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.

Research
/Security News
The compromise affects MemTensor's MemOS, an open source memory framework for large language models (LLMs) and AI agents. Both npm package @memtensor/memos-cloud-openclaw-plugin and the PyPI package MemoryOS are compromised. They drop cross-platform Go binaries that exfiltrate developer secrets.