@@ -3,13 +3,31 @@ import type { JavaScriptRegexEngineOptions, PatternScanner, RegexEngine, RegexEn
3
3
4
4
const MAX = 4294967295
5
5
6
+ /**
7
+ * The default RegExp constructor for JavaScript regex engine.
8
+ */
9
+ export function defaultJavaScriptRegexConstructor ( pattern : string ) : RegExp {
10
+ return onigurumaToRegexp (
11
+ pattern
12
+ . replace ( / \| \\ G ( \| | \) ) / g, '$1' )
13
+ . replace ( / ( \( | \| ) \\ G \| / g, '$1' )
14
+ // YAML specific handling; TODO: move to tm-grammars
15
+ . replaceAll ( '[^\\s[-?:,\\[\\]{}#&*!|>\'"%@`]]' , '[^\\s\\-?:,\\[\\]{}#&*!|>\'"%@`]' ) ,
16
+ {
17
+ flags : 'dgm' ,
18
+ ignoreContiguousAnchors : true ,
19
+ } ,
20
+ )
21
+ }
22
+
6
23
export class JavaScriptScanner implements PatternScanner {
7
24
regexps : ( RegExp | null ) [ ]
8
25
9
26
constructor (
10
27
public patterns : string [ ] ,
11
28
public cache : Map < string , RegExp | Error > ,
12
29
public forgiving : boolean ,
30
+ public regexConstructor : ( pattern : string ) => RegExp = defaultJavaScriptRegexConstructor ,
13
31
) {
14
32
this . regexps = patterns . map ( ( p ) => {
15
33
const cached = cache ?. get ( p )
@@ -22,17 +40,7 @@ export class JavaScriptScanner implements PatternScanner {
22
40
throw cached
23
41
}
24
42
try {
25
- const regex = onigurumaToRegexp (
26
- p
27
- . replace ( / \| \\ G ( \| | \) ) / g, '$1' )
28
- . replace ( / ( \( | \| ) \\ G \| / g, '$1' )
29
- // YAML specific handling; TODO: move to tm-grammars
30
- . replaceAll ( '[^\\s[-?:,\\[\\]{}#&*!|>\'"%@`]]' , '[^\\s\\-?:,\\[\\]{}#&*!|>\'"%@`]' ) ,
31
- {
32
- flags : 'dgm' ,
33
- ignoreContiguousAnchors : true ,
34
- } ,
35
- )
43
+ const regex = regexConstructor ( p )
36
44
cache ?. set ( p , regex )
37
45
return regex
38
46
}
@@ -126,7 +134,7 @@ export function createJavaScriptRegexEngine(options: JavaScriptRegexEngineOption
126
134
127
135
return {
128
136
createScanner ( patterns : string [ ] ) {
129
- return new JavaScriptScanner ( patterns , cache , forgiving )
137
+ return new JavaScriptScanner ( patterns , cache , forgiving , options . regexConstructor )
130
138
} ,
131
139
createString ( s : string ) {
132
140
return {
0 commit comments