replace
должен быть в состоянии сделать это за вас, например:
var str = str.replace(/ü/g, 'u');
... конечно ü
и u
являются не одной и той же буквой.: -)
Если вы пытаетесь заменить все символы вне заданного диапазона чем-то (например, -
), вы можете сделать это, указав диапазон:
var str = str.replace(/[^A-Za-z0-9\-_]/g, '-');
Это заменяет все символы, которые не являются английскими буквами, цифрами, -
или _
на -
.(Диапазон символов составляет [...]
бит, ^
в начале означает «не».) Вот живой пример .
Но это («Бавария-М-нчен»") Мистеру Мюнхену может быть немного неприятно смотреть.:-) Вы можете использовать функцию, переданную в 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 '-';
});
Живой пример
Выше оптимизировано для длинных строк,Если сама строка короткая, вам лучше использовать повторные регулярные выражения:
var str = str.replace(/[áàâä]/g, 'a')
.replace(/[úùûü]/g, 'u')
.replace(/[^A-Za-z0-9\-_]/g, '-');
... но это умозрительно.
Обратите внимание, что буквенные символы в строках JavaScript вполне подходят, ноВы можете повеселиться с кодированием файлов.Я склонен придерживаться Unicode Escape.Так, например, выше было бы:
var str = str.replace(/[\u00e4\u00e2\u00e0\u00e1]/g, 'a')
.replace(/[\u00fc\u00fb\u00f9\u00fa]/g, 'u')
.replace(' ','-');
... но опять же, есть лот еще сделать ...