Попробуйте это:
function doDashes(str) {
var re = /[^a-z0-9]+/gi; // global and case insensitive matching of non-char/non-numeric
var re2 = /^-*|-*$/g; // get rid of any leading/trailing dashes
str = str.replace(re, '-'); // perform the 1st regexp
return str.replace(re2, '').toLowerCase(); // ..aaand the second + return lowercased result
}
console.log(doDashes("hello world! I think that __i__ am awesome (yes I am!)"));
// => hello-world-I-think-that-i-am-awesome-yes-I-am
Что касается греческих символов, да, я не могу думать ни о чем другом, кроме какой-то таблицы поиска, используемой другим регулярным выражением.
Редактировать , вот версия oneliner:
Редактировать , добавлено в LowCase ():
Редактировать , неловкое исправление в конце регулярного выражения:
function doDashes2(str) {
return str.replace(/[^a-z0-9]+/gi, '-').replace(/^-*|-*$/g, '').toLowerCase();
}