replace
应该能够为您做到这一点,例如:
var str = str.replace(/ü/g, 'u');
...当然ü
and u
are not同一封信。 :-)
如果您尝试将给定范围之外的所有字符替换为某些字符(例如-
),您可以通过指定范围来做到这一点:
var str = str.replace(/[^A-Za-z0-9\-_]/g, '-');
那取代了all非英文字母、数字的字符,-
, or _
with -
。 (字符范围是[...]
比特,那个^
开头的意思是“不”。)这是一个活生生的例子 http://jsbin.com/ayadi3.
但这个(“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 '-';
});
实例 http://jsbin.com/ayadi3/2
以上针对长字符串进行了优化。如果字符串本身很短,则最好使用重复的正则表达式:
var str = str.replace(/[áàâä]/g, 'a')
.replace(/[úùûü]/g, 'u')
.replace(/[^A-Za-z0-9\-_]/g, '-');
...但这是推测性的。
请注意,JavaScript 字符串中的文字字符完全没问题,但文件编码可能会带来乐趣。我倾向于坚持使用 unicode 转义。例如,上面的内容是:
var str = str.replace(/[\u00e4\u00e2\u00e0\u00e1]/g, 'a')
.replace(/[\u00fc\u00fb\u00f9\u00fa]/g, 'u')
.replace(' ','-');
...但是同样,有一个lot还有更多要做...