90
return text.replace(regex, replaceString);
91
}
92
>
// Store the values of the search parameters.
replace.ts
93
>
const firstMatch = regex.exec(text);
94
>
if (firstMatch === null) {
95
return text.replace(regex, replaceString);
96
}
98
>
let patMatch: RegExpExecArray | null;
99
>
let newReplaceString = '';
100
>
let lastIndex = 0;
101
>
let lastMatch = '';
102
>
// For each annotated $N, perform text processing on the parameters and perform the substitution.
103
>
while ((patMatch = this._caseOpsRegExp.exec(replaceString)) !== null) {
104
>
lastIndex = patMatch.index;
105
>
const fullMatch = patMatch[0];
106
>
lastMatch = fullMatch;
107
>
let caseOps = patMatch[2]; // \u, \l\u, etc.
108
>
const money = patMatch[3]; // $1, $2, etc.
109
>
110
>
if (!caseOps) {
111
>
newReplaceString += fullMatch;
112
>
continue;
113
>
}
114
>
const replacement = firstMatch[parseInt(money.slice(1))];
115
>
if (!replacement) {
116
newReplaceString += fullMatch;
117
continue;
118
}
119
>
const replacementLen = replacement.length;
replace.ts
120
>
121
>
newReplaceString += patMatch[1]; // prefix
122
>
caseOps = caseOps.replace(/\\/g, '');
123
>
let i = 0;
124
>
for (; i < caseOps.length; i++) {
125
>
switch (caseOps[i]) {
126
>
case 'U':
127
newReplaceString += replacement.slice(i).toUpperCase();
128
i = replacementLen;
129
break;
131
newReplaceString += replacement[i].toUpperCase();
132
break;
134
newReplaceString += replacement.slice(i).toLowerCase();
135
i = replacementLen;
136
break;
138
newReplaceString += replacement[i].toLowerCase();
139
break;
141
>
}
142
>
// Append any remaining replacement string content not covered by case operations.
143
>
if (i < replacementLen) {
144
newReplaceString += replacement.slice(i);
145
}
147
>
newReplaceString += patMatch[4]; // suffix
148
>
}
149
>
150
>
// Append any remaining trailing content after the final regex match.
151
>
newReplaceString += replaceString.slice(lastIndex + lastMatch.length);
152
>
153
>
return text.replace(regex, newReplaceString);
154
}
155