-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrhyme.js
132 lines (117 loc) · 3.97 KB
/
rhyme.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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
function rhymeRegex(string) {
var rhymeLevel1Regex = '$';
var rhymeLevel2Regex = '$';
var rhymeLevel3Regex = '$';
var rhymeLevel4Regex = '$';
var rhymeLevel5Regex = '$';
var rhymeLevel6Regex = '$';
var splitedArray = splitBackPartByVowel(string);
var ConsonantReplacer1 = "";
var ConsonantReplacer2 = "";
var ConsonantReplacer3 = "";
var ConsonantReplacer4 = "";
var ConsonantReplacer5 = "";
var ConsonantReplacer6 = "[^aeiou]*";
if (splitedArray[5] != '') {
rhymeLevel1Regex = splitedArray[5] + rhymeLevel1Regex;
rhymeLevel2Regex = generateConsonantRegex(splitedArray[5], '{1}') + rhymeLevel2Regex;
rhymeLevel3Regex = generateConsonantRegex(splitedArray[5], '{1,}') + rhymeLevel3Regex;
}
if (splitedArray[4] != '') {
rhymeLevel1Regex = splitedArray[4] + rhymeLevel1Regex;
rhymeLevel2Regex = splitedArray[4] + rhymeLevel2Regex;
rhymeLevel3Regex = splitedArray[4] + rhymeLevel3Regex;
}
if (splitedArray[3] != '') {
rhymeLevel1Regex = splitedArray[3] + rhymeLevel1Regex;
rhymeLevel2Regex = generateConsonantRegex(splitedArray[3], '{1}') + rhymeLevel2Regex;
rhymeLevel3Regex = generateConsonantRegex(splitedArray[3], '{1,}') + rhymeLevel3Regex;
}
if (splitedArray[2] != '') {
rhymeLevel1Regex = splitedArray[2] + rhymeLevel1Regex;
rhymeLevel2Regex = splitedArray[2] + rhymeLevel2Regex;
rhymeLevel3Regex = splitedArray[2] + rhymeLevel3Regex;
}
if (splitedArray[1] != '') {
rhymeLevel1Regex = splitedArray[1] + rhymeLevel1Regex;
rhymeLevel2Regex = generateConsonantRegex(splitedArray[1], '{1,}') + rhymeLevel2Regex;
}
if (splitedArray[0] != '') {
rhymeLevel1Regex = splitedArray[0] + rhymeLevel1Regex;
rhymeLevel2Regex = splitedArray[0] + rhymeLevel2Regex;
}
return {
level1: rhymeLevel1Regex,
level2: rhymeLevel2Regex,
level3: rhymeLevel3Regex
}
}
// "satesto" returns 'a','t','e','st','o,''
// "vefxvisebr" returns 'e','fxv','i','s','e ','br'
function splitBackPartByVowel(string) {
var array = ['', '', '', '', '', ''];
var counter = 5;
for (var i = string.length - 1; i >= 0; i--) {
if (counter < 0)
break;
//contains vowel
if ('aeiou'.indexOf(string[i]) != -1) {
if (counter % 2 == 1) {
counter--;
}
array[counter--] = string[i];
} else {
//contains consonant
var subStrLength = 0;
while (i >= 0) {
if ('aeiou'.indexOf(string[i]) != -1) {
break;
}
subStrLength++;
i--;
}
array[counter--] = string.substring(i + 1, subStrLength + i + 1);
if (i >= 0) {
array[counter--] = string[i];
}
}
}
return array;
}
function getRelatedConsonants(char) {
var allRelatedConsonats = [
'bfpm',
'dTt',
'v',
'Zcwzs',
'jCWJS',
'gqkRx',
'y',
'h',
'nrl'
];
for (i = 0; i < allRelatedConsonats.length; i++) {
var relatedConsonants = allRelatedConsonats[i];
if (relatedConsonants.indexOf(char) != -1) {
return relatedConsonants;
}
}
}
function generateConsonantRegex(consonants, appendRegex) {
var result = '';
for (var i = 0; i < consonants.length; i++) {
result = result + '[' + getRelatedConsonants(consonants[i]) + ']' + appendRegex;
}
return result;
}
function vowelsCount(string) {
var count = 0;
var vowels = ['a', 'e', 'i', 'o', 'u'];
for (var i = 0; i < string.length; i++) {
if (vowels.indexOf(string[i]) !== -1) {
count++;
}
}
return count;
}
module.exports.rhymeRegex = rhymeRegex;