您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

JavaScript有效替换字符串中的所有重音字符?

JavaScript有效替换字符串中的所有重音字符?

我无法说出您要针对函数本身专门做什么,但是如果您不喜欢每次都构建正则表达式,则这里有两个解决方案,以及每个注意事项。

这是执行此操作的一种方法

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]; 
    }) );
  }
})();
javascript 2022/1/1 18:16:46 有486人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶