组合变音符号敏感的字符替换字符串

问题描述 投票:0回答:1

对于程序中我替换字符串中的字符的错误:

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 函数?

javascript diacritics
1个回答
0
投票

您可以使用与基本字符匹配的正则表达式,后跟组合标记。在正则表达式

/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); 

© www.soinside.com 2019 - 2024. All rights reserved.