What is randexp?
The randexp npm package is used to generate random strings that match a given regular expression. This can be useful for testing, generating mock data, or any scenario where you need random but structured strings.
What are randexp's main functionalities?
Generate Random String from Regex
This feature allows you to generate a random string that matches a given regular expression. In this example, the generated string will match the pattern 'hello+ (world|to you)'.
const RandExp = require('randexp');
const randexp = new RandExp(/hello+ (world|to you)/);
console.log(randexp.gen());
Custom Randomness
You can customize the randomness by overriding the `randInt` method. In this example, the `randInt` method is overridden to always return the lower bound, making the output deterministic.
const RandExp = require('randexp');
const randexp = new RandExp(/hello+ (world|to you)/);
randexp.randInt = (a, b) => a; // Always return the lower bound
console.log(randexp.gen());
Using Flags
RandExp supports regex flags such as case insensitivity. In this example, the 'i' flag makes the regex case insensitive.
const RandExp = require('randexp');
const randexp = new RandExp(/hello+ (world|to you)/i); // Case insensitive
console.log(randexp.gen());
Other packages similar to randexp
faker
Faker is a popular library for generating fake data. While it doesn't generate strings based on regular expressions, it provides a wide range of methods for generating random data such as names, addresses, and phone numbers. It is more feature-rich in terms of the variety of data it can generate compared to randexp.
chance
Chance is another library for generating random data. It offers a variety of random data generators, including strings, numbers, and even entire objects. Like Faker, it does not focus on regex-based string generation but provides a broader range of random data generation capabilities.
xeger
Xeger is a library specifically designed to generate strings that match a given regular expression, similar to randexp. It is a JavaScript port of the Java library Xeger and offers similar functionality to randexp, focusing on regex-based string generation.
randexp.js
randexp will generate a random string that matches a given RegExp Javascript object.
Usage
var RandExp = require('randexp');
new RandExp(/hello+ (world|to you)/).gen();
new RandExp(/<([a-z]\w{0,20})>foo<\1>/).gen();
new RandExp(/random stuff: .+/).gen();
new RandExp(/xxx xtreme dragon warrior xxx/i).gen();
new RandExp('(sun|mon|tue|wednes|thurs|fri|satur)day', 'i');
new RandExp(new RegExp('(sun|mon|tue|wednes|thurs|fri|satur)day', 'i'));
If you're only going to use gen()
once with a regexp and want slightly shorter syntax for it
var randexp = require('randexp').randexp;
randexp(/[1-6]/);
randexp('great|good( job)?|excellent');
If you miss the old syntax
require('randexp').sugar();
/yes|no|maybe|i don't know/.gen();
Motivation
Regular expressions are used in every language, every programmer is familiar with them. Regex can be used to easily express complex strings. What better way to generate a random string than with a tool you can easily use to express the string any way you want?
Thanks to String-Random for giving me the idea to make this in the first place and randexp for the sweet .gen()
syntax.
Negated Character Sets
Sets like the .
character will match anything except a new line. In this case, a character with a random char code between 0 and 65535 will be generated. If you want to overwrite this function you can change the anyRandChar
function in the randexp object.
var randexp = new RandExp(/./);
randexp.anyRandChar = function() {
return 'c';
};
If using RandExp.sugar()
var regexp = /./;
regexp.anyRandChar = function() {
return 'c';
};
Infinite Repetitionals
Repetitional tokens such as *
, +
, and {3,}
have an infinite max range. In this case, randexp looks at its min and adds 100 to it to get a useable max value. If you want to use another int other than 100 you can change the max
property in the randexp object.
var randexp = new RandExp(/no{1,}/);
randexp.max = 1000000;
With RandExp.sugar()
var regexp = /(hi)*/;
regexp.max = 1000000;
Bad Regular Expressions
There are some regular expressions which can never match any string.
-
Ones with badly placed positionals such as /a^/
and /$c/m
. Randexp will ignore positional tokens.
-
Back references to non-existing groups like /(a)\1\2/
. Randexp will ignore those references, returning an empty string for them. If the group exists only after the reference is used such as in /\1 (hey)/
, it will too be ignored.
-
Custom negated character sets with two sets inside that cancel each other out. Example: /[^\w\W]/
. If you give this to randexp, it will ignore both set tokens.
Other cancelling out character sets like /[^\D]/
are bad too. These are the same as /[\d]/
. Except it will be slow in generating a matching string because it will first generate a random character and then check if it's in the set inside. It will take a while to randomly generate an integer out of 65535 characters.
Install
Node.js
npm install randexp
Browser
Download the minified version from the latest release.
Tests
Tests are written with mocha
npm test
License
MIT