Если подстрока из более раннего .replace
заменена чем-то, что ищется в более позднем .replace
, результат более раннего .replace
будет перезаписан более поздним. Вместо этого я бы использовал объект значений замены, содержащий только один .replace
, чтобы ни один символ не проверялся и не заменялся более одного раза.
Если сопоставляемые символы могут быть символами со специальным значением в регулярные выражения, такие как [
, сначала избегают их :
var text;
const replacements = {
'\u006d': 'A',
M: 'B',
',': 'C',
'<': 'D',
c: 'E',
C: 'F',
v: 'G',
V: 'H',
I: 'I',
x: 'J',
X: 'K',
xs: 'L',
};
const pattern = new RegExp(
Object.keys(replacements)
.map(s => s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'))
.join('|'),
'g'
);
function startConvert() {
document.formTest.destination.value = document.formTest.source.value
.replace(pattern, match => replacements[match]);
}
<center>
<table width="500">
<tbody>
<tr>
<form name="formTest">
<td>
<textarea onkeyup="startConvert();" onclick="startConvert();" name="source" rows="5" onselect="startConvert();">
</textarea>
</td>
<td>
<textarea name="destination" rows="5"></textarea>
</td>
</form>
</tr>
</tbody>
</table>
</center>