1 | 'use strict';
|
2 |
|
3 | const separator = '\\.';
|
4 | const oneWord = '0-9a-zA-Z_\\-\\:';
|
5 | const anyNumberOfWord = `${oneWord}${separator}`;
|
6 |
|
7 | const escape = str => str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
8 |
|
9 | const compilePart = (part) => {
|
10 | if (part === '*')
|
11 | return `[${oneWord}]+?`;
|
12 | if (part === '#')
|
13 | return `[${anyNumberOfWord}]+?`;
|
14 | return escape(part);
|
15 | };
|
16 |
|
17 | const compile = (pattern) => {
|
18 | const parts = pattern.split('.');
|
19 | return new RegExp(`^${parts.map(compilePart).join('\\.')}$`);
|
20 | };
|
21 |
|
22 |
|
23 | class RegexMatcher {
|
24 | constructor(pattern) {
|
25 | this.pattern = compile(pattern);
|
26 | }
|
27 |
|
28 | match(text = '') {
|
29 | return this.pattern.test(text);
|
30 | }
|
31 | }
|
32 |
|
33 | module.exports = RegexMatcher;
|