-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathpingRegex.js
More file actions
32 lines (28 loc) · 803 Bytes
/
pingRegex.js
File metadata and controls
32 lines (28 loc) · 803 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
fn.pingRegex = wrap(() => {
const filter = /(\||\\|\(|\)|\*|\+|\?|\.|\^|\$|\[|\{|\})/g;
const atReplace = 'atSign<@>';
class AtSafeRegExp extends RegExp {
test(string) {
return super.test(string.replace('@', atReplace));
}
replace(text, mask) {
return text.replace('@', atReplace).replace(this, mask).replace(atReplace, '@');
}
}
function filterMeta(text) {
return text.replace(filter, '\\$1').replace('@', atReplace);
}
function build() {
const extras = settings.value('underscript.ping.extras');
if (!extras.length) {
return {
test() {
return false;
},
};
}
const exp = `\\b((?:${extras.map(filterMeta).join(')|(?:')}))(?!.*">)\\b`;
return new AtSafeRegExp(exp, 'gi');
}
return build;
});