本文介绍了在JavaScript中删除字符串中的重音符号/变音符号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何从字符串中删除突出的字符?
特别是在IE6中,我有这样的东西:
How do I remove accentuated characters from a string?Especially in IE6, I had something like this:
accentsTidy = function(s){
var r=s.toLowerCase();
r = r.replace(new RegExp(/\s/g),"");
r = r.replace(new RegExp(/[àáâãäå]/g),"a");
r = r.replace(new RegExp(/æ/g),"ae");
r = r.replace(new RegExp(/ç/g),"c");
r = r.replace(new RegExp(/[èéêë]/g),"e");
r = r.replace(new RegExp(/[ìíîï]/g),"i");
r = r.replace(new RegExp(/ñ/g),"n");
r = r.replace(new RegExp(/[òóôõö]/g),"o");
r = r.replace(new RegExp(/œ/g),"oe");
r = r.replace(new RegExp(/[ùúûü]/g),"u");
r = r.replace(new RegExp(/[ýÿ]/g),"y");
r = r.replace(new RegExp(/\W/g),"");
return r;
};
但IE6让我感到烦恼,似乎它不喜欢我的正则表达式。
but IE6 bugs me, seems it doesn't like my regular expression.
推荐答案
使用ES2015 / ES6 ,
With ES2015/ES6 String.Prototype.Normalize(),
const str = "Crème Brulée"
str.normalize('NFD').replace(/[\u0300-\u036f]/g, "")
> 'Creme Brulee'
这里发生了两件事:
-
normalize()
转到NFD
Unicode普通表单将合并的字形分解为简单的组合。Crème
的è
最终表示为e
+ - 使用正则表达式以匹配U + 0300→U + 036F范围,它现在是微不足道的
g
自由地摆脱变音符号,其中Unicode标准可以方便地分组为 Unicode块。
normalize()
ing toNFD
Unicode normal form decomposes combined graphemes into the combination of simple ones. Theè
ofCrème
ends up expressed ase
+̀
.- Using a regex character class to match the U+0300 → U+036F range, it is now trivial to
g
lobally get rid of the diacritics, which the Unicode standard conveniently groups as the Combining Diacritical Marks Unicode block.
查看性能测试评论。
或者,如果您只想要排序
有足够的支持,一个polyfill也可以但我还没有测试过。
Intl.Collator has sufficient support ~85% right now, a polyfill is also available here but I haven't tested it.
const c = new Intl.Collator();
['creme brulee', 'crème brulé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 brulée','creme brulfé','crome brouillé' ]
['creme brulee', 'crème brulée', 'crame brulai', 'crome brouillé'].sort((a,b) => a>b)
["crame brulai", "creme brulee", "crome brouillé", "crème brulée"]
这篇关于在JavaScript中删除字符串中的重音符号/变音符号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!