Контекст. Я пытаюсь исключить тильды (орфографические ударения) и тильды, чтобы сравнить 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.** Есть ли прямой способ заменить **любой [диакритический знак][1]** без необходимости вручную создавать новую карту? Я заинтересован в покрытии диакритических знаков любого языка.
Вопрос 2. Принимая во внимание, что в испанском языке la ñ
— это буква, отличная от n
, можно ли убрать диакритические знаки, за исключением случаев, когда это ñ
?
* Вопрос, заданный blonfu в комментариях
Начиная с ECMAScript 6 (2015), String.prototype.normalize() можно использовать для вызова декомпозированной формы нормализации в Unicode (см. совместимость ).
Это означает, что символ ( на самом деле «кодовая точка» ) может быть разбит на его эквивалентность базового символа, за которым следуют его метки. Например:
Обе формы эквивалентны и печатаются одинаково.
В форме NFD диакритические знаки представляют собой разные кодовые точки (~символы).
И важно то, что все диакритические знаки находятся в диапазоне
U+0300
-U+036F
.Код (для всех языков)
Приводит к разложенной форме и убирает блок Combining Diacritical Marks .
Тесты:
Диакритические знаки, кроме la
ñ
(только на испанском языке)Мы можем удалить только ударение на гласных или умляут на
ü
.Разлагаем, исключаем диакритические знаки исключительно из
áéíóúü
и снова составляем:Или мы можем удалить любой диакритический знак (для любого языка), кроме случаев, когда это
ñ
:Тесты: