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 вполне допустимы, но вы можете столкнуться с забавой при кодировании файлов. Я склонен придерживаться экранирования юникода. Так, например, приведенное выше будет:
var str = str.replace(/[\u00e4\u00e2\u00e0\u00e1]/g, 'a')
.replace(/[\u00fc\u00fb\u00f9\u00fa]/g, 'u')
.replace(' ','-');
...но опять же, есть еще много дел...
person
T.J. Crowder
schedule
26.01.2011