Extended regular expressions with augmented syntax, named capture groups, Unicode support, and cross-browser compatibility
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
XRegExp provides augmented and extensible JavaScript regular expressions. You get modern syntax and flags beyond what browsers support natively, including named capture groups, Unicode property matching, free-spacing syntax with comments, and cross-browser compatibility fixes. XRegExp compiles to native RegExp objects for optimal performance while extending functionality with additional features.
npm install xregexpimport XRegExp from "xregexp";For CommonJS:
const XRegExp = require("xregexp");import XRegExp from "xregexp";
// Named capture groups with free-spacing mode
const date = XRegExp(`
(?<year> [0-9]{4} ) -? # year
(?<month> [0-9]{2} ) -? # month
(?<day> [0-9]{2} ) # day
`, 'x');
// Enhanced exec with named captures
const match = XRegExp.exec('2021-02-22', date);
console.log(match.groups.year); // '2021'
// Enhanced replace with named backreferences
const formatted = XRegExp.replace('2021-02-22', date, '$<month>/$<day>/$<year>');
console.log(formatted); // '02/22/2021'
// Unicode property matching
const identifier = XRegExp('\\p{Letter}[\\p{Letter}\\p{Number}]*', 'A');
identifier.test('變數名'); // trueXRegExp is built around several key components:
Core functionality for creating extended regular expressions with additional syntax and flags beyond native JavaScript support.
/**
* Creates an extended regular expression object with additional syntax and flags
* @param pattern - Regex pattern string or existing regex to copy
* @param flags - Any combination of flags (native: dgimsuy, XRegExp: nxsA)
* @returns Extended regular expression object
*/
function XRegExp(pattern: string | RegExp, flags?: string): RegExp;
/** XRegExp version number */
const version: string;Regular Expression Construction
Improved regex execution methods with named capture support, position control, and cross-browser consistency.
/**
* Enhanced exec with named capture support and position/sticky options
* @param str - String to search
* @param regex - Regex to search with
* @param pos - Zero-based index to start search
* @param sticky - Whether match must start at specified position only
* @returns Match array with named capture properties or null
*/
function exec(str: string, regex: RegExp, pos?: number, sticky?: boolean | 'sticky'): ExecArray | null;
/**
* Enhanced test with position/sticky support
* @param str - String to search
* @param regex - Regex to search with
* @param pos - Zero-based index to start search
* @param sticky - Whether match must start at specified position only
* @returns Whether the regex matched
*/
function test(str: string, regex: RegExp, pos?: number, sticky?: boolean | 'sticky'): boolean;Enhanced string methods with named backreference support and cross-browser fixes.
/**
* Enhanced match method with scope control
* @param str - String to search
* @param regex - Regex to search with
* @param scope - Use 'one' for first match or 'all' for all matches
* @returns First match string, array of matches, or null
*/
function match(str: string, regex: RegExp, scope?: 'one' | 'all'): string | string[] | null;
/**
* Enhanced replace with named backreference support
* @param str - String to search
* @param search - Search pattern to replace
* @param replacement - Replacement string or function
* @param scope - Use 'one' to replace first match only or 'all'
* @returns New string with matches replaced
*/
function replace(str: string, search: RegExp | string, replacement: string | Function, scope?: 'one' | 'all'): string;Advanced pattern construction tools including named subpatterns, template literals, and pattern combination.
/**
* Builds regexes using named subpatterns with automatic backreference renumbering
* @param pattern - XRegExp pattern using {{name}} for embedded subpatterns
* @param subs - Lookup object for named subpatterns (strings or regexes)
* @param flags - Any combination of XRegExp flags
* @returns Regex with interpolated subpatterns
*/
function build(pattern: string, subs: Record<string, string | RegExp>, flags?: string): RegExp;
/**
* Creates tagged template literal handler for regex construction
* @param flags - Any combination of XRegExp flags
* @returns Handler for template literals that construct regexes
*/
function tag(flags?: string): (literals: TemplateStringsArray, ...substitutions: any[]) => RegExp;
/**
* Escapes regex metacharacters for literal matching
* @param str - String to escape
* @returns String with regex metacharacters escaped
*/
function escape(str: string): string;Pattern Building and Utilities
Specialized matching capabilities including recursive/balanced delimiters and chained matching.
/**
* Matches balanced delimiters with configurable options
* @param str - String to search
* @param left - Left delimiter as XRegExp pattern
* @param right - Right delimiter as XRegExp pattern
* @param flags - Any combination of XRegExp flags
* @param options - Options for value names, escape chars, unbalanced handling
* @returns Array of matches or detailed match objects
*/
function matchRecursive(str: string, left: string, right: string, flags?: string, options?: MatchRecursiveOptions): string[] | MatchRecursiveValueNameMatch[];
/**
* Chains regexes for successive matching within previous results
* @param str - String to search
* @param chain - Array of regexes or objects with regex and backref properties
* @returns Matches by the last regex in the chain
*/
function matchChain(str: string, chain: (RegExp | ChainArrayElement)[]): string[];Comprehensive Unicode property, category, and script matching with astral plane support.
/**
* Adds Unicode character data for \\p{} and \\P{} tokens
* @param data - Array of objects with Unicode character ranges
* @param typePrefix - Optional type prefix for all provided tokens
*/
function addUnicodeData(data: UnicodeCharacterRange[], typePrefix?: string): void;Tools for extending XRegExp syntax and managing optional features.
/**
* Extends XRegExp syntax with custom tokens and flags
* @param regex - Regex that matches the new token
* @param handler - Function that returns replacement pattern
* @param options - Options for scope, flags, and behavior
*/
function addToken(regex: RegExp, handler: Function, options?: TokenOptions): void;
/**
* Installs or uninstalls optional features
* @param options - Features to install: 'astral', 'namespacing'
*/
function install(options: string | FeatureOptions): void;
function uninstall(options: string | FeatureOptions): void;
/**
* Checks if optional features are installed
* @param feature - Feature name to check
* @returns Whether the feature is installed
*/
function isInstalled(feature: 'astral' | 'namespacing'): boolean;Extensibility and Configuration
interface ExecArray extends Array<string> {
index: number;
input: string;
groups?: NamedGroupsArray;
[propName: string]: any;
}
interface NamedGroupsArray {
[key: string]: string;
}
interface ChainArrayElement {
regex: RegExp;
backref: number | string;
}
interface MatchRecursiveOptions {
escapeChar?: string;
valueNames?: [string, string, string, string];
unbalanced?: 'error' | 'skip' | 'skip-lazy';
}
interface MatchRecursiveValueNameMatch {
name: string;
value: string;
start: number;
end: number;
}
interface TokenOptions {
scope?: 'default' | 'class' | 'all';
flag?: string;
optionalFlags?: string;
reparse?: boolean;
leadChar?: string;
}
interface FeatureOptions {
astral?: boolean;
namespacing?: boolean;
}
interface UnicodeCharacterRange {
name: string;
alias?: string;
isBmpLast?: boolean;
inverseOf?: string;
bmp?: string;
astral?: string;
}