在 JavaScript 中删除字符串中的重音符号/变音符号
从字符串中删除重音字符对于文本处理和数据分析来说是一项有用的任务。在提供的代码中,accentsTidy 函数尝试使用正则表达式删除重音符号。但是,这种方法可能效率不高或不可靠,尤其是在 IE6 等较旧的浏览器中。
ES2015/ES6 解决方案
更现代、更高效的解决方案是使用ES2015/ES6 String.prototype.normalize() 方法。此方法将字符串转换为 Unicode 标准化形式。通过使用“NFD”形式(将组合字素分解为其基本字符和组合标记),删除变音符号变得更加容易。下面是一个示例:
const str = "Crème Brûlée"; str.normalize("NFD").replace(/[\u0300-\u036f]/g, ""); // "Creme Brulee"
正则表达式匹配 Unicode 范围 U 0300 → U 036F,其中包括各种变音符号。其他 Unicode 范式(例如“NFKD”)可用于以不同方式规范化 uFB01 (fi) 等字符。
使用 Unicode 属性转义
ES2018 引入了 Unicode 属性转义,提供更简洁的方法来删除变音符号:
str.normalize("NFD").replace(/\p{Diacritic}/gu, ""); // "Creme Brulee"
This escape 匹配具有 Unicode 属性“Diacritic”的所有字符。
或者:排序
如果目标是使用重音符号对字符串进行排序,则 Intl.Collator 对象可以是用过的。它支持根据 Unicode 规范顺序对字符串进行排序,忽略变音符号。这是一个示例:
const c = new Intl.Collator(); ["creme brulee", "crème brûlée", "crame brulai", "crome brouillé", "creme brulay", "creme brulfé", "creme bruléa"].sort(c.compare); // ['crame brulai', 'creme brulay', 'creme bruléa', 'creme brulee', 'crème brûlée', 'creme brulfé', 'crome brouillé']
以上是如何在 JavaScript 中有效地去除字符串中的重音符号?的详细内容。更多信息请关注PHP中文网其他相关文章!