UNPKG

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