语境。我尝试消除波浪号(拼写重音)和波浪号,以比较 2 个单词。我做了这个功能:
let sinDiacriticos = (function(){
let de = 'ÁÃÀÄÂÉËÈÊÍÏÌÎÓÖÒÔÚÜÙÛÑÇáãàäâéëèêíïìîóöòôúüùûñç',
a = 'AAAAAEEEEIIIIOOOOUUUUNCaaaaaeeeeiiiioooouuuunc',
re = new RegExp('['+de+']' , 'ug');
return texto =>
texto.replace(
re,
match => a.charAt(de.indexOf(match))
);
})();
let prue = 'Épico año de mal agüero, sólo Óscar y Ángel ganarán ésta. -Ímpetú Úrsula. ¡Ñañdú corre rápido por ahí!';
console.log(sinDiacriticos(prue));
// -> Epico ano de mal aguero, solo Oscar y Angel ganaran esta. -Impetu Ursula. ¡Nandu corre rapido por ahi!
**问题 1.** 有没有直接替换**any [diacritic][1]** 而无需手动生成替换地图的方法?我有兴趣涵盖任何语言的变音符号。
问题 2.请记住,在西班牙语中 lañ
是与 不同的字母n
,除了 a 之外,可以消除变音符号ñ
吗?
* blonfu在评论中提出的问题
从 ECMAScript 6 (2015) 开始,String.prototype.normalize()可用于在 Unicode 中调出规范化的分解形式(参见兼容性)。
这意味着一个字符(实际上是一个“代码点”)可以分解为它的基本字符等价物,然后是它的标记。例如:
这两种形式是等效的并且打印相同。
在NFD形式中,变音符号是不同的代码点(~字符)。
重要的是所有变音符号都在
U+0300
-U+036F
范围内。代码(适用于所有语言)
导致分解的形式,并删除组合变音符号块。
测试:
除了 la 的变音符号
ñ
(仅限西班牙语)我们只能删除元音上的重音符号或
ü
.我们分解,我们完全消除变音符号,
áéíóúü
然后我们再次组合:或者我们可以删除任何变音符号(对于任何语言),除非它是
ñ
:测试: