@@ -24,30 +24,68 @@ ruleTester.run("no-invalid-regexp", rule, {
24
24
"new RegExp('.', 'im')" ,
25
25
"global.RegExp('\\\\')" ,
26
26
"new RegExp('.', y)" ,
27
- { code : "new RegExp('.', 'y')" , options : [ { allowConstructorFlags : [ "y" ] } ] } ,
28
- { code : "new RegExp('.', 'u')" , options : [ { allowConstructorFlags : [ "U" ] } ] } ,
29
- { code : "new RegExp('.', 'yu')" , options : [ { allowConstructorFlags : [ "y" , "u" ] } ] } ,
30
- { code : "new RegExp('/', 'yu')" , options : [ { allowConstructorFlags : [ "y" , "u" ] } ] } ,
31
- { code : "new RegExp('\\/', 'yu')" , options : [ { allowConstructorFlags : [ "y" , "u" ] } ] } ,
32
- { code : "new RegExp('.', 'y')" , parserOptions : { ecmaVersion : 6 } } ,
33
- { code : "new RegExp('.', 'u')" , parserOptions : { ecmaVersion : 6 } } ,
34
- { code : "new RegExp('.', 'yu')" , parserOptions : { ecmaVersion : 6 } } ,
35
- { code : "new RegExp('/', 'yu')" , parserOptions : { ecmaVersion : 6 } } ,
36
- { code : "new RegExp('\\/', 'yu')" , parserOptions : { ecmaVersion : 6 } } ,
37
- { code : "new RegExp('\\\\u{65}', 'u')" , parserOptions : { ecmaVersion : 2015 } } ,
38
- { code : "new RegExp('[\\\\u{0}-\\\\u{1F}]', 'u')" , parserOptions : { ecmaVersion : 2015 } } ,
39
- { code : "new RegExp('.', 's')" , parserOptions : { ecmaVersion : 2018 } } ,
40
- { code : "new RegExp('(?<=a)b')" , parserOptions : { ecmaVersion : 2018 } } ,
41
- { code : "new RegExp('(?<!a)b')" , parserOptions : { ecmaVersion : 2018 } } ,
42
- { code : "new RegExp('(?<a>b)\\k<a>')" , parserOptions : { ecmaVersion : 2018 } } ,
43
- { code : "new RegExp('(?<a>b)\\k<a>', 'u')" , parserOptions : { ecmaVersion : 2018 } } ,
44
- { code : "new RegExp('\\\\p{Letter}', 'u')" , parserOptions : { ecmaVersion : 2018 } } ,
27
+ "new RegExp('.', 'y')" ,
28
+ "new RegExp('.', 'u')" ,
29
+ "new RegExp('.', 'yu')" ,
30
+ "new RegExp('/', 'yu')" ,
31
+ "new RegExp('\\/', 'yu')" ,
32
+ "new RegExp('\\\\u{65}', 'u')" ,
33
+ "new RegExp('\\\\u{65}*', 'u')" ,
34
+ "new RegExp('[\\\\u{0}-\\\\u{1F}]', 'u')" ,
35
+ "new RegExp('.', 's')" ,
36
+ "new RegExp('(?<=a)b')" ,
37
+ "new RegExp('(?<!a)b')" ,
38
+ "new RegExp('(?<a>b)\\k<a>')" ,
39
+ "new RegExp('(?<a>b)\\k<a>', 'u')" ,
40
+ "new RegExp('\\\\p{Letter}', 'u')" ,
45
41
46
42
// ES2020
47
43
"new RegExp('(?<\\\\ud835\\\\udc9c>.)', 'g')" ,
48
44
"new RegExp('(?<\\\\u{1d49c}>.)', 'g')" ,
49
45
"new RegExp('(?<𝒜>.)', 'g');" ,
50
- "new RegExp('\\\\p{Script=Nandinagari}', 'u');"
46
+ "new RegExp('\\\\p{Script=Nandinagari}', 'u');" ,
47
+
48
+ // allowConstructorFlags
49
+ {
50
+ code : "new RegExp('.', 'g')" ,
51
+ options : [ { allowConstructorFlags : [ ] } ]
52
+ } ,
53
+ {
54
+ code : "new RegExp('.', 'g')" ,
55
+ options : [ { allowConstructorFlags : [ "a" ] } ]
56
+ } ,
57
+ {
58
+ code : "new RegExp('.', 'a')" ,
59
+ options : [ { allowConstructorFlags : [ "a" ] } ]
60
+ } ,
61
+ {
62
+ code : "new RegExp('.', 'ag')" ,
63
+ options : [ { allowConstructorFlags : [ "a" ] } ]
64
+ } ,
65
+ {
66
+ code : "new RegExp('.', 'ga')" ,
67
+ options : [ { allowConstructorFlags : [ "a" ] } ]
68
+ } ,
69
+ {
70
+ code : "new RegExp('.', 'a')" ,
71
+ options : [ { allowConstructorFlags : [ "a" , "z" ] } ]
72
+ } ,
73
+ {
74
+ code : "new RegExp('.', 'z')" ,
75
+ options : [ { allowConstructorFlags : [ "a" , "z" ] } ]
76
+ } ,
77
+ {
78
+ code : "new RegExp('.', 'az')" ,
79
+ options : [ { allowConstructorFlags : [ "a" , "z" ] } ]
80
+ } ,
81
+ {
82
+ code : "new RegExp('.', 'za')" ,
83
+ options : [ { allowConstructorFlags : [ "a" , "z" ] } ]
84
+ } ,
85
+ {
86
+ code : "new RegExp('.', 'agz')" ,
87
+ options : [ { allowConstructorFlags : [ "a" , "z" ] } ]
88
+ }
51
89
] ,
52
90
invalid : [
53
91
{
@@ -66,6 +104,42 @@ ruleTester.run("no-invalid-regexp", rule, {
66
104
type : "CallExpression"
67
105
} ]
68
106
} ,
107
+ {
108
+ code : "RegExp('.', 'a');" ,
109
+ options : [ { } ] ,
110
+ errors : [ {
111
+ messageId : "regexMessage" ,
112
+ data : { message : "Invalid flags supplied to RegExp constructor 'a'" } ,
113
+ type : "CallExpression"
114
+ } ]
115
+ } ,
116
+ {
117
+ code : "new RegExp('.', 'a');" ,
118
+ options : [ { allowConstructorFlags : [ ] } ] ,
119
+ errors : [ {
120
+ messageId : "regexMessage" ,
121
+ data : { message : "Invalid flags supplied to RegExp constructor 'a'" } ,
122
+ type : "NewExpression"
123
+ } ]
124
+ } ,
125
+ {
126
+ code : "new RegExp('.', 'z');" ,
127
+ options : [ { allowConstructorFlags : [ "a" ] } ] ,
128
+ errors : [ {
129
+ messageId : "regexMessage" ,
130
+ data : { message : "Invalid flags supplied to RegExp constructor 'z'" } ,
131
+ type : "NewExpression"
132
+ } ]
133
+ } ,
134
+ {
135
+ code : "new RegExp('.', 'az');" ,
136
+ options : [ { allowConstructorFlags : [ "z" ] } ] ,
137
+ errors : [ {
138
+ messageId : "regexMessage" ,
139
+ data : { message : "Invalid flags supplied to RegExp constructor 'a'" } ,
140
+ type : "NewExpression"
141
+ } ]
142
+ } ,
69
143
{
70
144
code : "new RegExp(')');" ,
71
145
errors : [ {
@@ -74,6 +148,23 @@ ruleTester.run("no-invalid-regexp", rule, {
74
148
type : "NewExpression"
75
149
} ]
76
150
} ,
151
+ {
152
+ code : String . raw `new RegExp('\\a', 'u');` ,
153
+ errors : [ {
154
+ messageId : "regexMessage" ,
155
+ data : { message : "Invalid regular expression: /\\a/u: Invalid escape" } ,
156
+ type : "NewExpression"
157
+ } ]
158
+ } ,
159
+ {
160
+ code : String . raw `new RegExp('\\a', 'u');` ,
161
+ options : [ { allowConstructorFlags : [ "u" ] } ] ,
162
+ errors : [ {
163
+ messageId : "regexMessage" ,
164
+ data : { message : "Invalid regular expression: /\\a/u: Invalid escape" } ,
165
+ type : "NewExpression"
166
+ } ]
167
+ } ,
77
168
78
169
// https://github.com/eslint/eslint/issues/10861
79
170
{
0 commit comments