@@ -82,7 +82,7 @@ function inRange(min, max, num) {
82
82
83
83
describe ( 'to-regex-range' , function ( ) {
84
84
after ( function ( ) {
85
- let num = ( + ( + ( count ) . toFixed ( 2 ) ) ) . toLocaleString ( ) ;
85
+ let num = ( + ( + count . toFixed ( 2 ) ) ) . toLocaleString ( ) ;
86
86
console . log ( ) ;
87
87
console . log ( ' ' , num , 'values tested' ) ;
88
88
} ) ;
@@ -95,11 +95,29 @@ describe('to-regex-range', function() {
95
95
it ( 'should throw an error when the second arg is invalid:' , function ( ) {
96
96
assert . throws ( ( ) => toRange ( 1 , { } ) , / e x p e c t e d / ) ;
97
97
} ) ;
98
+
99
+ it ( 'should match the given numbers' , function ( ) {
100
+ let oneFifty = new RegExp ( '^' + toRange ( 1 , 150 ) + '$' ) ;
101
+ assert ( oneFifty . test ( '125' ) ) ;
102
+ assert ( ! oneFifty . test ( '0' ) ) ;
103
+ assert ( oneFifty . test ( '1' ) ) ;
104
+ assert ( oneFifty . test ( '126' ) ) ;
105
+ assert ( oneFifty . test ( '150' ) ) ;
106
+ assert ( ! oneFifty . test ( '151' ) ) ;
107
+
108
+ let oneTwentyFive = new RegExp ( '^' + toRange ( 1 , 125 ) + '$' ) ;
109
+ assert ( oneTwentyFive . test ( '125' ) ) ;
110
+ assert ( ! oneTwentyFive . test ( '0' ) ) ;
111
+ assert ( oneTwentyFive . test ( '1' ) ) ;
112
+ assert ( ! oneTwentyFive . test ( '126' ) ) ;
113
+ assert ( ! oneTwentyFive . test ( '150' ) ) ;
114
+ assert ( ! oneTwentyFive . test ( '151' ) ) ;
115
+ } ) ;
98
116
} ) ;
99
117
100
118
describe ( 'minimum / maximum' , function ( ) {
101
119
it ( 'should reverse `min/max` when the min is larger than the max:' , function ( ) {
102
- assert . strictEqual ( toRange ( 55 , 10 ) , '1[0-9]|[2-4][0-9]|5[0-5]' ) ;
120
+ assert . strictEqual ( toRange ( 55 , 10 ) , '(?: 1[0-9]|[2-4][0-9]|5[0-5]) ' ) ;
103
121
} ) ;
104
122
} ) ;
105
123
@@ -118,74 +136,74 @@ describe('to-regex-range', function() {
118
136
119
137
it ( 'should support strings:' , function ( ) {
120
138
assert . strictEqual ( toRange ( '1' , '5' ) , '[1-5]' ) ;
121
- assert . strictEqual ( toRange ( '10' , '50' ) , '1[0-9]|[2-4][0-9]|50' ) ;
139
+ assert . strictEqual ( toRange ( '10' , '50' ) , '(?: 1[0-9]|[2-4][0-9]|50) ' ) ;
122
140
} ) ;
123
141
124
142
it ( 'should support padded ranges:' , function ( ) {
125
143
assert . strictEqual ( toRange ( '001' , '005' ) , '0{2}[1-5]' ) ;
126
144
assert . strictEqual ( toRange ( '01' , '05' ) , '0[1-5]' ) ;
127
- assert . strictEqual ( toRange ( '001' , '100' ) , '0{2}[1-9]|0[1-9][0-9]|100' ) ;
128
- assert . strictEqual ( toRange ( '0001' , '1000' ) , '0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|1000' ) ;
145
+ assert . strictEqual ( toRange ( '001' , '100' ) , '(?: 0{2}[1-9]|0[1-9][0-9]|100) ' ) ;
146
+ assert . strictEqual ( toRange ( '0001' , '1000' ) , '(?: 0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|1000) ' ) ;
129
147
} ) ;
130
148
131
149
it ( 'should work when padding is imbalanced:' , function ( ) {
132
- assert . strictEqual ( toRange ( '001' , '105' ) , '0{2}[1-9]|0[1-9][0-9]|10[0-5]' ) ;
133
- assert . strictEqual ( toRange ( '01' , '105' ) , '0{2}[1-9]|0[1-9][0-9]|10[0-5]' ) ;
134
- assert . strictEqual ( toRange ( '010' , '105' ) , '01[0-9]|0[2-9][0-9]|10[0-5]' ) ;
135
- assert . strictEqual ( toRange ( '010' , '1005' ) , '0{2}1[0-9]|0{2}[2-9][0-9]|0[1-9][0-9]{2}|100[0-5]' ) ;
150
+ assert . strictEqual ( toRange ( '001' , '105' ) , '(?: 0{2}[1-9]|0[1-9][0-9]|10[0-5]) ' ) ;
151
+ assert . strictEqual ( toRange ( '01' , '105' ) , '(?: 0{2}[1-9]|0[1-9][0-9]|10[0-5]) ' ) ;
152
+ assert . strictEqual ( toRange ( '010' , '105' ) , '(?: 01[0-9]|0[2-9][0-9]|10[0-5]) ' ) ;
153
+ assert . strictEqual ( toRange ( '010' , '1005' ) , '(?: 0{2}1[0-9]|0{2}[2-9][0-9]|0[1-9][0-9]{2}|100[0-5]) ' ) ;
136
154
assert . strictEqual ( toRange ( '0001' , '1000' ) , toRange ( '001' , '1000' ) ) ;
137
155
assert . strictEqual ( toRange ( '0001' , '1000' ) , toRange ( '01' , '1000' ) ) ;
138
156
} ) ;
139
157
140
158
it ( 'should generate regex strings for negative patterns' , function ( ) {
141
- assert . strictEqual ( toRange ( - 1 , 0 ) , '-1|0' ) ;
142
- assert . strictEqual ( toRange ( - 1 , 1 ) , '-1|[01]' ) ;
159
+ assert . strictEqual ( toRange ( - 1 , 0 ) , '(?: -1|0) ' ) ;
160
+ assert . strictEqual ( toRange ( - 1 , 1 ) , '(?: -1|[01]) ' ) ;
143
161
assert . strictEqual ( toRange ( - 4 , - 2 ) , '-[2-4]' ) ;
144
- assert . strictEqual ( toRange ( - 3 , 1 ) , '-[1-3]|[01]' ) ;
145
- assert . strictEqual ( toRange ( - 2 , 0 ) , '-[12]|0' ) ;
146
- assert . strictEqual ( toRange ( - 1 , 3 ) , '-1|[0-3]' ) ;
162
+ assert . strictEqual ( toRange ( - 3 , 1 ) , '(?: -[1-3]|[01]) ' ) ;
163
+ assert . strictEqual ( toRange ( - 2 , 0 ) , '(?: -[12]|0) ' ) ;
164
+ assert . strictEqual ( toRange ( - 1 , 3 ) , '(?: -1|[0-3]) ' ) ;
147
165
matchRange ( - 1 , - 1 , '-1' , [ - 1 ] , [ - 2 , 0 , 1 ] ) ;
148
- matchRange ( - 1 , - 10 , '-[1-9]|-10' , [ - 1 , - 5 , - 10 ] , [ - 11 , 0 ] ) ;
149
- matchRange ( - 1 , 3 , '-1|[0-3]' , [ - 1 , 0 , 1 , 2 , 3 ] , [ - 2 , 4 ] ) ;
166
+ matchRange ( - 1 , - 10 , '(?: -[1-9]|-10) ' , [ - 1 , - 5 , - 10 ] , [ - 11 , 0 ] ) ;
167
+ matchRange ( - 1 , 3 , '(?: -1|[0-3]) ' , [ - 1 , 0 , 1 , 2 , 3 ] , [ - 2 , 4 ] ) ;
150
168
} ) ;
151
169
152
170
it ( 'should wrap patterns when options.capture is true' , function ( ) {
153
- assert . strictEqual ( toRange ( - 1 , 0 , { capture : true } ) , '(-1|0)' ) ;
154
- assert . strictEqual ( toRange ( - 1 , 1 , { capture : true } ) , '(-1|[01])' ) ;
155
- assert . strictEqual ( toRange ( - 4 , - 2 , { capture : true } ) , '-[2-4]' ) ;
156
- assert . strictEqual ( toRange ( - 3 , 1 , { capture : true } ) , '(-[1-3]|[01])' ) ;
157
- assert . strictEqual ( toRange ( - 2 , 0 , { capture : true } ) , '(-[12]|0)' ) ;
158
- assert . strictEqual ( toRange ( - 1 , 3 , { capture : true } ) , '(-1|[0-3])' ) ;
171
+ assert . strictEqual ( toRange ( - 1 , 0 , { capture : true } ) , '(-1|0)' ) ;
172
+ assert . strictEqual ( toRange ( - 1 , 1 , { capture : true } ) , '(-1|[01])' ) ;
173
+ assert . strictEqual ( toRange ( - 4 , - 2 , { capture : true } ) , '( -[2-4]) ' ) ;
174
+ assert . strictEqual ( toRange ( - 3 , 1 , { capture : true } ) , '(-[1-3]|[01])' ) ;
175
+ assert . strictEqual ( toRange ( - 2 , 0 , { capture : true } ) , '(-[12]|0)' ) ;
176
+ assert . strictEqual ( toRange ( - 1 , 3 , { capture : true } ) , '(-1|[0-3])' ) ;
159
177
} ) ;
160
178
161
179
it ( 'should generate regex strings for positive patterns' , function ( ) {
162
180
assert . strictEqual ( toRange ( 1 , 1 ) , '1' ) ;
163
- assert . strictEqual ( toRange ( 0 , 1 ) , '0|1' ) ;
181
+ assert . strictEqual ( toRange ( 0 , 1 ) , '(?: 0|1) ' ) ;
164
182
assert . strictEqual ( toRange ( 0 , 2 ) , '[0-2]' ) ;
165
- assert . strictEqual ( toRange ( 65666 , 65667 ) , '65666|65667' ) ;
166
- assert . strictEqual ( toRange ( 12 , 3456 ) , '1[2-9]|[2-9][0-9]|[1-9][0-9]{2}|[12][0-9]{3}|3[0-3][0-9]{2}|34[0-4][0-9]|345[0-6]' ) ;
167
- assert . strictEqual ( toRange ( 1 , 3456 ) , '[1-9]|[1-9][0-9]{1,2}|[12][0-9]{3}|3[0-3][0-9]{2}|34[0-4][0-9]|345[0-6]' ) ;
168
- assert . strictEqual ( toRange ( 1 , 10 ) , '[1-9]|10' ) ;
169
- assert . strictEqual ( toRange ( 1 , 19 ) , '[1-9]|1[0-9]' ) ;
170
- assert . strictEqual ( toRange ( 1 , 99 ) , '[1-9]|[1-9][0-9]' ) ;
171
- assert . strictEqual ( toRange ( 1 , 100 ) , '[1-9]|[1-9][0-9]|100' ) ;
172
- assert . strictEqual ( toRange ( 1 , 1000 ) , '[1-9]|[1-9][0-9]{1,2}|1000' ) ;
173
- assert . strictEqual ( toRange ( 1 , 10000 ) , '[1-9]|[1-9][0-9]{1,3}|10000' ) ;
174
- assert . strictEqual ( toRange ( 1 , 100000 ) , '[1-9]|[1-9][0-9]{1,4}|100000' ) ;
175
- assert . strictEqual ( toRange ( 1 , 9999999 ) , '[1-9]|[1-9][0-9]{1,6}' ) ;
176
- assert . strictEqual ( toRange ( 99 , 100000 ) , '99|[1-9][0-9]{2,4}|100000' ) ;
177
-
178
- matchRange ( 99 , 100000 , '99|[1-9][0-9]{2,4}|100000' , [ 99 , 999 , 989 , 100 , 9999 , 9899 , 10009 , 10999 , 100000 ] , [ 0 , 9 , 100001 , 100009 ] ) ;
183
+ assert . strictEqual ( toRange ( 65666 , 65667 ) , '(?: 65666|65667) ' ) ;
184
+ assert . strictEqual ( toRange ( 12 , 3456 ) , '(?: 1[2-9]|[2-9][0-9]|[1-9][0-9]{2}|[12][0-9]{3}|3[0-3][0-9]{2}|34[0-4][0-9]|345[0-6]) ' ) ;
185
+ assert . strictEqual ( toRange ( 1 , 3456 ) , '(?: [1-9]|[1-9][0-9]{1,2}|[12][0-9]{3}|3[0-3][0-9]{2}|34[0-4][0-9]|345[0-6]) ' ) ;
186
+ assert . strictEqual ( toRange ( 1 , 10 ) , '(?: [1-9]|10) ' ) ;
187
+ assert . strictEqual ( toRange ( 1 , 19 ) , '(?: [1-9]|1[0-9]) ' ) ;
188
+ assert . strictEqual ( toRange ( 1 , 99 ) , '(?: [1-9]|[1-9][0-9]) ' ) ;
189
+ assert . strictEqual ( toRange ( 1 , 100 ) , '(?: [1-9]|[1-9][0-9]|100) ' ) ;
190
+ assert . strictEqual ( toRange ( 1 , 1000 ) , '(?: [1-9]|[1-9][0-9]{1,2}|1000) ' ) ;
191
+ assert . strictEqual ( toRange ( 1 , 10000 ) , '(?: [1-9]|[1-9][0-9]{1,3}|10000) ' ) ;
192
+ assert . strictEqual ( toRange ( 1 , 100000 ) , '(?: [1-9]|[1-9][0-9]{1,4}|100000) ' ) ;
193
+ assert . strictEqual ( toRange ( 1 , 9999999 ) , '(?: [1-9]|[1-9][0-9]{1,6}) ' ) ;
194
+ assert . strictEqual ( toRange ( 99 , 100000 ) , '(?: 99|[1-9][0-9]{2,4}|100000) ' ) ;
195
+
196
+ matchRange ( 99 , 100000 , '(?: 99|[1-9][0-9]{2,4}|100000) ' , [ 99 , 999 , 989 , 100 , 9999 , 9899 , 10009 , 10999 , 100000 ] , [ 0 , 9 , 100001 , 100009 ] ) ;
179
197
} ) ;
180
198
181
199
it ( 'should optimize regexes' , function ( ) {
182
- assert . strictEqual ( toRange ( - 9 , 9 ) , '-[1-9]|[0-9]' ) ;
183
- assert . strictEqual ( toRange ( - 19 , 19 ) , '-[1-9]|-?1[0-9]|[0-9]' ) ;
184
- assert . strictEqual ( toRange ( - 29 , 29 ) , '-[1-9]|-?[12][0-9]|[0-9]' ) ;
185
- assert . strictEqual ( toRange ( - 99 , 99 ) , '-[1-9]|-?[1-9][0-9]|[0-9]' ) ;
186
- assert . strictEqual ( toRange ( - 999 , 999 ) , '-[1-9]|-?[1-9][0-9]{1,2}|[0-9]' ) ;
187
- assert . strictEqual ( toRange ( - 9999 , 9999 ) , '-[1-9]|-?[1-9][0-9]{1,3}|[0-9]' ) ;
188
- assert . strictEqual ( toRange ( - 99999 , 99999 ) , '-[1-9]|-?[1-9][0-9]{1,4}|[0-9]' ) ;
200
+ assert . strictEqual ( toRange ( - 9 , 9 ) , '(?: -[1-9]|[0-9]) ' ) ;
201
+ assert . strictEqual ( toRange ( - 19 , 19 ) , '(?: -[1-9]|-?1[0-9]|[0-9]) ' ) ;
202
+ assert . strictEqual ( toRange ( - 29 , 29 ) , '(?: -[1-9]|-?[12][0-9]|[0-9]) ' ) ;
203
+ assert . strictEqual ( toRange ( - 99 , 99 ) , '(?: -[1-9]|-?[1-9][0-9]|[0-9]) ' ) ;
204
+ assert . strictEqual ( toRange ( - 999 , 999 ) , '(?: -[1-9]|-?[1-9][0-9]{1,2}|[0-9]) ' ) ;
205
+ assert . strictEqual ( toRange ( - 9999 , 9999 ) , '(?: -[1-9]|-?[1-9][0-9]{1,3}|[0-9]) ' ) ;
206
+ assert . strictEqual ( toRange ( - 99999 , 99999 ) , '(?: -[1-9]|-?[1-9][0-9]{1,4}|[0-9]) ' ) ;
189
207
} ) ;
190
208
} ) ;
191
209
0 commit comments