Bakhtina Sofya b84cb877be 1st comm | 2 minggu lalu | |
---|---|---|
.. | ||
LICENSE | 2 minggu lalu | |
README.md | 2 minggu lalu | |
index.js | 2 minggu lalu | |
package.json | 2 minggu lalu |
Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.
Please consider following this project's author, Jon Schlinkert, and consider starring the project to show your :heart: and support.
Install with npm:
$ npm install --save to-regex-range
Add this library to your javascript application with the following line of code
const toRegexRange = require('to-regex-range');
The main export is a function that takes two integers: the min
value and max
value (formatted as strings or numbers).
const source = toRegexRange('15', '95');
//=> 1[5-9]|[2-8][0-9]|9[0-5]
const regex = new RegExp(`^${source}$`);
console.log(regex.test('14')); //=> false
console.log(regex.test('50')); //=> true
console.log(regex.test('94')); //=> true
console.log(regex.test('96')); //=> false
Type: boolean
Deafault: undefined
Wrap the returned value in parentheses when there is more than one regex condition. Useful when you're dynamically generating ranges.
console.log(toRegexRange('-10', '10'));
//=> -[1-9]|-?10|[0-9]
console.log(toRegexRange('-10', '10', { capture: true }));
//=> (-[1-9]|-?10|[0-9])
Type: boolean
Deafault: undefined
Use the regex shorthand for [0-9]
:
console.log(toRegexRange('0', '999999'));
//=> [0-9]|[1-9][0-9]{1,5}
console.log(toRegexRange('0', '999999', { shorthand: true }));
//=> \d|[1-9]\d{1,5}
Type: boolean
Default: true
This option relaxes matching for leading zeros when when ranges are zero-padded.
const source = toRegexRange('-0010', '0010');
const regex = new RegExp(`^${source}$`);
console.log(regex.test('-10')); //=> true
console.log(regex.test('-010')); //=> true
console.log(regex.test('-0010')); //=> true
console.log(regex.test('10')); //=> true
console.log(regex.test('010')); //=> true
console.log(regex.test('0010')); //=> true
When relaxZeros
is false, matching is strict:
const source = toRegexRange('-0010', '0010', { relaxZeros: false });
const regex = new RegExp(`^${source}$`);
console.log(regex.test('-10')); //=> false
console.log(regex.test('-010')); //=> false
console.log(regex.test('-0010')); //=> true
console.log(regex.test('10')); //=> false
console.log(regex.test('010')); //=> false
console.log(regex.test('0010')); //=> true
Range | Result | Compile time |
---|---|---|
toRegexRange(-10, 10) |
-[1-9]\|-?10\|[0-9] |
132μs |
toRegexRange(-100, -10) |
-1[0-9]\|-[2-9][0-9]\|-100 |
50μs |
toRegexRange(-100, 100) |
-[1-9]\|-?[1-9][0-9]\|-?100\|[0-9] |
42μs |
toRegexRange(001, 100) |
0{0,2}[1-9]\|0?[1-9][0-9]\|100 |
109μs |
toRegexRange(001, 555) |
0{0,2}[1-9]\|0?[1-9][0-9]\|[1-4][0-9]{2}\|5[0-4][0-9]\|55[0-5] |
51μs |
toRegexRange(0010, 1000) |
0{0,2}1[0-9]\|0{0,2}[2-9][0-9]\|0?[1-9][0-9]{2}\|1000 |
31μs |
toRegexRange(1, 50) |
[1-9]\|[1-4][0-9]\|50 |
24μs |
toRegexRange(1, 55) |
[1-9]\|[1-4][0-9]\|5[0-5] |
23μs |
toRegexRange(1, 555) |
[1-9]\|[1-9][0-9]\|[1-4][0-9]{2}\|5[0-4][0-9]\|55[0-5] |
30μs |
toRegexRange(1, 5555) |
[1-9]\|[1-9][0-9]{1,2}\|[1-4][0-9]{3}\|5[0-4][0-9]{2}\|55[0-4][0-9]\|555[0-5] |
43μs |
toRegexRange(111, 555) |
11[1-9]\|1[2-9][0-9]\|[2-4][0-9]{2}\|5[0-4][0-9]\|55[0-5] |
38μs |
toRegexRange(29, 51) |
29\|[34][0-9]\|5[01] |
24μs |
toRegexRange(31, 877) |
3[1-9]\|[4-9][0-9]\|[1-7][0-9]{2}\|8[0-6][0-9]\|87[0-7] |
32μs |
toRegexRange(5, 5) |
5 |
8μs |
toRegexRange(5, 6) |
5\|6 |
11μs |
toRegexRange(1, 2) |
1\|2 |
6μs |
toRegexRange(1, 5) |
[1-5] |
15μs |
toRegexRange(1, 10) |
[1-9]\|10 |
22μs |
toRegexRange(1, 100) |
[1-9]\|[1-9][0-9]\|100 |
25μs |
toRegexRange(1, 1000) |
[1-9]\|[1-9][0-9]{1,2}\|1000 |
31μs |
toRegexRange(1, 10000) |
[1-9]\|[1-9][0-9]{1,3}\|10000 |
34μs |
toRegexRange(1, 100000) |
[1-9]\|[1-9][0-9]{1,4}\|100000 |
36μs |
toRegexRange(1, 1000000) |
[1-9]\|[1-9][0-9]{1,5}\|1000000 |
42μs |
toRegexRange(1, 10000000) |
[1-9]\|[1-9][0-9]{1,6}\|10000000 |
42μs |
Order of arguments
When the min
is larger than the max
, values will be flipped to create a valid range:
toRegexRange('51', '29');
Is effectively flipped to:
toRegexRange('29', '51');
//=> 29|[3-4][0-9]|5[0-1]
Steps / increments
This library does not support steps (increments). A pr to add support would be welcome.
New features
Adds support for zero-padding!
Optimizations
Repeating ranges are now grouped using quantifiers. rocessing time is roughly the same, but the generated regex is much smaller, which should result in faster matching.
Inspired by the python library range-regex.
You might also be interested in these projects:
step
to… more | homepage| Commits | Contributor |
| --- | --- |
| 63 | jonschlinkert |
| 3 | doowb |
| 2 | realityking |
Jon Schlinkert
Please consider supporting me on Patreon, or start your own Patreon page!
Copyright © 2019, Jon Schlinkert. Released under the MIT License.
This file was generated by verb-generate-readme, v0.8.0, on April 07, 2019.