Как сделать слаг для URL из строки
Короткий ответ
Слаг — это часть адреса, сделанная из заголовка. Переведите его в нижний регистр и замените всё, кроме букв и цифр, дефисами:
const slug = 'Hello World: JavaScript Tips!'
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-|-$/g, '');
console.log(slug);Результат:
hello-world-javascript-tipsБуквы с диакритикой
normalize('NFD') разделяет букву вроде é на e и знак ударения, а затем знаки удаляются:
const slugify = (text) =>
text
.normalize('NFD')
.replace(/[̀-ͯ]/g, '')
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-|-$/g, '');
console.log(slugify('Café au lait in Zürich'));Результат:
cafe-au-lait-in-zurichЧастая ошибка
Без последнего replace() слаг может начинаться или заканчиваться дефисом:
console.log(' Hello! '.toLowerCase().replace(/[^a-z0-9]+/g, '-'));Результат:
-hello-Функции из этого ответа
- String.prototype.replace — Заменяет первое совпадение (или все — с флагом g у регулярного выражения).
- String.prototype.toLowerCase — Переводит строку в нижний регистр.