对于程序中我替换字符串中的字符的错误:
let a = "o";
let b = "x";
let preString = "őa";
let postString = preString.replace(a, b);
alert(postString);
预期的行为应该打印出“őa”,因为代码设置为将字符串“őa”中的“o”替换为“x”,但字符串中没有要替换的“o”,所以,它应该保留一样的。
它会打印出“x̋a”。因为,“ő”是两个字符
o◌̈
。因此替换函数与“o”匹配,留下组合变音符号稍后显示在 x 上。
我如何获得预期的行为?我不相信规范化字符串能解决任何问题。我能想到的唯一其他解决方案是以一种方式分割字符串,让我得到一个数组
[o◌̈, a]
并且可以对其进行迭代。除非我缺少 RegExp 函数?
您可以使用与基本字符匹配的正则表达式,后跟组合标记。在正则表达式
/o[\u0300-\u036f]/g
中,[\u0300-\u036f]
是一个包含所有组合变音标记的范围,而 g
标志可确保替换所有出现的情况。这样,“o” 及其变音符号将被视为单个单元进行替换。
let a = "o";
let b = "x";
let preString = "őa";
// Use a regular expression to match the character and any combining marks
let combiningMarksRegex = /o[\u0300-\u036f]/g;
let postString = preString.replace(combiningMarksRegex, b);
alert(postString);