forked from null8626/decancer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
decancer.js
34 lines (27 loc) · 1.2 KB
/
decancer.js
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
33
34
const constants = require('./index.json');
const alphabet = [...'abcdefghijklmnopqrstuvwxyz'];
const startRegex = new RegExp(constants.startRegex, 'g');
/**
* @param {string} text The text to decancer.
* @returns {string} The cleaned string. Will ALWAYS be in lowercase.
*/
module.exports = (text) => {
if (typeof text !== 'string' || !text.length)
throw new TypeError("'text' must be a string and it must contain at least a character.");
else if (!/[^\u0000-\u007F]/.test(text))
return text.toLowerCase(); // sorry
for (const [k, v] of Object.entries(constants.emojis))
text = text.replace(new RegExp(v, 'g'), k);
for (const [k, v] of Object.entries(constants.others))
text = text.replace(new RegExp(`[${v}]`), k);
text = text
.toLowerCase()
.replace(startRegex, '');
for (let i = 0; i < 26; i++) {
const [ styles, extras ] = constants.alphabetical[i].split(';');
text = text
.replace(new RegExp(`[${extras}]`, 'gi'), alphabet[i])
.replace(new RegExp([...styles].map(x => `(${x})`).join('|'), 'g'), alphabet[i]);
}
return text.replace(/[\uD800-\uDB7F]/g, '');
};