如何将一个字符和一个“组合音调”组合成一个单独的字符?
我正在将用户输入的短语提交到法英词典中进行查询。有时,由于大多数重音字符都有两种表示方式,因此词典查询会失败。例如:
- é可以用一个字符完成:
\xE9
(带有锐音的拉丁小写字母e)。 - 但是它也可以由两个字符表示:
e
+\u0301
(组合式锐音符号)。
我总是想向词典提交前者(单个字符)。
目前,我通过替换每个两个字符的出现来实现等效的单个字符。但是是否有更简单(即一行)的方法在JavaScript或从输入字段获取时在浏览器中执行此操作?
function translate(phrase) {
// Combine accents into a single accented character, if necessary.
var TRANSFORM = [
// Acute accent.
[/E\u0301/g, "\xC9"], // É
[/e\u0301/g, "\xE9"], // é
// Grave accent.
[/a\u0300/g, "\xE0"], // à
[/e\u0300/g, "\xE8"], // è
[/u\u0300/g, "\xF9"], // ù
// Cedilla (no combining accent).
// Circumflex.
[/a\u0302/g, "\xE2"], // â
[/e\u0302/g, "\xEA"], // ê
[/i\u0302/g, "\xEE"], // î
[/o\u0302/g, "\xF4"], // ô
[/u\u0302/g, "\xFB"], // û
// Trema.
[/e\u0308/g, "\xEB"], // ë
[/i\u0308/g, "\xEF"], // ï
[/u\u0308/g, "\xFC"] // ü
// oe ligature (no combining accent).
];
for (var i = 0; i < TRANSFORM.length; i++)
phrase = phrase.replace(TRANSFORM[i][0], TRANSFORM[i][1]);
// Do translation.
...
}
.[\\u0300\\u0302]
),然后检查匹配是否在所有选择的字典中。 - Alexei Levenkov