Первый. Соответствует любому символу, который не является буквенно-цифровым, пробельным или не-ascii, и заменяет их пустой строкой.
str.replace(/[^a-z0-9\s\x80-\uFFFF]+/gi, '');
Не существует юникод-классовЯ могу использовать, поэтому я либо включаю все символы Юникода, либо перечисляю те, которые не являются буквами, цифрами или пробелами.
Секунда. Соответствует любой последовательности из двух или более тирезаменяет их одним штрихом.
str.replace(/-{2,}/g, '-');