如何从字符串中删除突出的字符?特别是在IE6中,我有这样的事情:
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;
};
Run Code Online (Sandbox Code Playgroud)
但IE6让我烦恼,似乎它不喜欢我的正则表达式.
基本上我找到了一个如下所示的 slug 函数:
function slug(string) => {
return string.toString().toLowerCase()
.replace(/\s+/g, '-')
.replace(/[^\w\-]+/g, '')
.replace(/\-\-+/g, '-')
.replace(/^-+/, '')
.replace(/-+$/, '');
};
Run Code Online (Sandbox Code Playgroud)
但是,它似乎不适用于俄语、希腊语、...字符。基本上它们在这一步被删除了.replace(/[^\w\-]+/g, ''),我不想要但我也想删除在某些国家不代表正常字母的其他特殊字符。
例子:
English| Do you know it rains?|do-you-know-it-rains
Czech| víš, že prší?|vis-ze-prsi
Romanian| ?ti c? plou??|sti-ca-ploua
Russian| ?? ??????, ??? ???? ??????|??-??????-???-????-?????
笔记:
基本上对于拉丁字母,我将保留字母但删除变音符号,但对于非拉丁字母,我将保持原样(我不想将它们转换为拉丁字符)