https://github.com/sindresorhus/super-regex
Make a regular expression time out if it takes too long to execute
https://github.com/sindresorhus/super-regex
Last synced: 10 months ago
JSON representation
Make a regular expression time out if it takes too long to execute
- Host: GitHub
- URL: https://github.com/sindresorhus/super-regex
- Owner: sindresorhus
- License: mit
- Created: 2022-06-03T10:05:33.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-09-13T06:21:04.000Z (over 1 year ago)
- Last Synced: 2025-05-10T16:27:42.198Z (11 months ago)
- Language: JavaScript
- Size: 23.4 KB
- Stars: 211
- Watchers: 2
- Forks: 8
- Open Issues: 3
-
Metadata Files:
- Readme: readme.md
- License: license
- Security: .github/security.md
Awesome Lists containing this project
- awesome-regex - super-regex - Add an execution timeout to regexes. (JavaScript regex libraries / Regex processors, utilities, and more)
README
# super-regex
> Make a regular expression time out if it takes too long to execute
This can be used to prevent [ReDoS vulnerabilities](https://en.wikipedia.org/wiki/ReDoS) when running a regular expression against untrusted user input.
This package also has a better API than the built-in regular expression methods. For example, none of the methods mutate the regex.
The timeout only works in Node.js. In the browser, it will simply not time out.
## Install
```sh
npm install super-regex
```
## Usage
```js
import {isMatch} from 'super-regex';
console.log(isMatch(/\d+/, getUserInput(), {timeout: 1000}));
```
## API
### isMatch(regex, string, options?)
Returns a boolean for whether the given `regex` matches the given `string`.
If the regex takes longer to match than the given timeout, it returns `false`.
*This method is similar to [`RegExp#test`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test), but differs in that the given `regex` is [never mutated, even when it has the `/g` flag](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test#using_test_on_a_regex_with_the_global_flag).*
### firstMatch(regex, string, options?)
Returns the first `Match` or `undefined` if there was no match.
If the regex takes longer to match than the given timeout, it returns `undefined`.
### matches(regex, string, options?)
Returns an iterable of `Match`es.
If the regex takes longer to match than the given timeout, it returns an empty array.
**The `regex` must have the `/g` flag.**
#### options
Type: `object`
##### timeout?
Type: `number` *(integer)*
The time in milliseconds to wait before timing out.
##### matchTimeout?
Type: `number` *(integer)*
Only works in `matches()`.
The time in milliseconds to wait before timing out when searching for each match.
### Match
```ts
{
match: string;
index: number;
groups: string[];
namedGroups: {string: string}; // object with string values
input: string;
}
```
## Related
- [function-timeout](https://github.com/sindresorhus/function-timeout) - Make a synchronous function have a timeout