删除javascript字符串中的变音符号或特殊字符

Fra*_*ank 3 javascript diacritics

从来没有在javascript字符串中播放变音符号或特殊字符.我的问题是如何删除它们?

例如我在javascript中有这个:

var oldstr = "Bayern München";
var str = oldstr.split(' ').join('-');
Run Code Online (Sandbox Code Playgroud)

结果是拜仁慕尼黑很容易,但现在我想要移除变音符号或特殊搜索:

Real SportingdeGijón.

我怎么能意识到这一点?

亲切的问候,

坦率

T.J*_*der 9

replace 应该能够为你做到,例如:

var str = str.replace(/ü/g, 'u');
Run Code Online (Sandbox Code Playgroud)

当然...... üu相同的字母.:-)

如果您尝试使用某些内容(如a -)替换给定范围之外的所有字符,则可以通过指定范围来执行此操作:

var str = str.replace(/[^A-Za-z0-9\-_]/g, '-');
Run Code Online (Sandbox Code Playgroud)

这将替换所有不是英文字母,数字-_用的字符-.(字符范围是[...]位,^开头意味着"不".)这是一个实例.

但那个("Bayern-M-nchen")对于慕尼黑先生来说可能有点不愉快.:-)您可以使用传入的函数replace来尝试删除变音:

var str = str.replace(/[^A-Za-z0-9\-_]/g, function(ch) {
  // Character that look a bit like 'a'
  if ("áàâä".indexOf(ch) >= 0) { // There are a lot more than this
    return 'a';
  }
  // Character that look a bit like 'u'
  if ("úùûü".indexOf(ch) >= 0) { // There are a lot more than this
    return 'u';
  }
  /* ...long list of others...*/
  // Default
  return '-';
});
Run Code Online (Sandbox Code Playgroud)

实例

以上针对长字符串进行了优化.如果字符串本身很短,那么重复的regexp可能会更好:

var str = str.replace(/[áàâä]/g, 'a')
             .replace(/[úùûü]/g, 'u')
             .replace(/[^A-Za-z0-9\-_]/g, '-');
Run Code Online (Sandbox Code Playgroud)

......但这是推测性的.

请注意,JavaScript字符串中的文字字符完全没问题,但您可以通过编码文件来充满乐趣.我倾向于坚持unicode逃脱.例如,以上将是:

var str = str.replace(/[\u00e4\u00e2\u00e0\u00e1]/g, 'a')
             .replace(/[\u00fc\u00fb\u00f9\u00fa]/g, 'u')
             .replace(' ','-');
Run Code Online (Sandbox Code Playgroud)

......但是,还有很多事要做......

  • 请注意,由于拜仁慕尼黑是德国人,你应该遵循德国的规则,并用"ue"代替'ü'...... :-) (3认同)
  • @Martijn那么,作为一个德国人,我只会说它唯一关心的是拜仁慕尼黑?:-) (2认同)