gpt4 book ai didi

javascript - 如何将一个字符后跟一个 "combining accent"组合成一个字符?

转载 作者:数据小太阳 更新时间:2023-10-29 05:12:36 25 4
gpt4 key购买 nike

如何将一个字符后跟“组合重音”组合成一个字符?

我将用户输入网页的短语提交给法语-英语词典。有时字典查找会失败,因为大多数重音字符有两种表示形式。例如:

  • é 可以用单个字符完成:\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.
...
}

最佳答案

这叫做 normalization ,看起来你想要 NFC 规范化:

Characters are decomposed and then recomposed by canonical equivalence.

换句话说,它将任何组合字符替换为等效的单个字符。

这是内置于 ECMAScript 6 中的 String.prototype.normalize ,所以如果您只支持较新的浏览器就可以了,您可以执行以下操作:

phrase = phrase.normalize('NFC');

为了也支持旧版浏览器,看起来这个库可以满足您的需求:
https://github.com/walling/unorm

用法是phrase = UNorm.nfc(phrase)

关于javascript - 如何将一个字符后跟一个 "combining accent"组合成一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23477472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com