有效地替换字符串中的所有重音字符?对穷人来说近-排序规则-在客户端进行正确的排序-我需要一个JavaScript函数高效率字符串中的单个字符替换。这就是我的意思(请注意,这适用于德语文本,其他语言排序不同):native sorting gets it wrong: a b c o u z ä ö ü
collation-correct would be: a ä b c o ö u ü z基本上,我需要将给定字符串的所有“a”替换为“a”(以此类推)。这样,本机排序的结果将非常接近用户预期的结果(或数据库返回的内容)。其他语言也有这样做的便利:Python用品str.translate(),在Perl有tr/…/…/, XPath有一个函数translate(), ColdFusionReplaceList()..但是JavaScript呢?这是我现在所拥有的。// s would be a rather short string (something like // 200 characters at max, most of the time much less)function makeSortString(s) {
var translate = {
"ä": "a", "ö": "o", "ü": "u",
"Ä": "A", "Ö": "O", "Ü": "U" // probably more to come
};
var translate_re = /[öäüÖÄÜ]/g;
return ( s.replace(translate_re, function(match) {
return translate[match];
}) );}首先,我不喜欢每次调用这个函数时都会重建正则表达式。我想结束在这方面会有帮助,但我似乎没有掌握它的诀窍,出于某种原因。有人能想到更有效率的东西吗?以下答案可分为两类:不同程度的完整性和效率的字符串替换函数(我最初问的是什么)A 迟提的String#localeCompare,它在JS引擎中得到了广泛的支持,能够更优雅地解决这类问题。
3 回答
料青山看我应如是
TA贡献1772条经验 获得超8个赞
function makeSortString(s) { if(!makeSortString.translate_re) makeSortString.translate_re = /[öäüÖÄÜ]/g; var translate = { "ä": "a", "ö": "o", "ü": "u", "Ä": "A", "Ö": "O", "Ü": "U" // probably more to come }; return ( s.replace(makeSortString.translate_re, function(match) { return translate[match]; }) );}
makeSortString.translate_re = /[a-z]/g;
var makeSortString = (function() { var translate_re = /[öäüÖÄÜ]/g; return function(s) { var translate = { "ä": "a", "ö": "o", "ü": "u", "Ä": "A", "Ö": "O", "Ü": "U" // probably more to come }; return ( s.replace(translate_re, function(match) { return translate[match]; }) ); }})();
translate
var makeSortString = (function() { var translate_re = /[öäüÖÄÜ]/g; var translate = { "ä": "a", "ö": "o", "ü": "u", "Ä": "A", "Ö": "O", "Ü": "U" // probably more to come }; return function(s) { return ( s.replace(translate_re, function(match) { return translate[match]; }) ); }})();
添加回答
举报
0/150
提交
取消