#javascript #regex #slug
#javascript #регулярное выражение #ошибка
Вопрос:
У меня есть регулярное выражение, которое заменяет все не буквенно-цифровые символы дефисом.
slugName = $(this).val().replace(/[^a-z0-9]/gi, '-');
Это работает так, как должно, однако, поскольку это генерируется на основе пользовательского ввода, я могу получить результат, подобный my-awesome-title---stuff
который мог бы быть введен как my awesome title amp; stuff
Как вы можете видеть, теперь у меня есть три последовательных дефиса, которые на самом деле не выглядят как красивый URL.
Есть ли какой-либо способ, которым я могу заменить такие вхождения, если есть последовательная строка дефисов?
Комментарии:
1. Вы также хотели бы обрезать дефисы по краям?
-still-not-pretty-
2. Хороший источник для изучения регулярных выражений: regular-expressions.info
Ответ №1:
Что-то вроде этого:
slugName = $(this).val().replace(/[^a-z0-9] /gi, '-');
Следует заменить один или несколько экземпляров символов, которые не являются буквенно-цифровыми, на 1 дефис. ‘ ‘ в данном случае означает один или несколько экземпляров .
Комментарии:
1. Просто для дополнительного замечания, как я могу предотвратить это с первым и последним символами?
Ответ №2:
Используйте другое регулярное выражение для свертывания нескольких тире:
slugName = slugName.replace(/- /g, '-');
Комментарии:
1. В дополнительном нет необходимости
replace
, просто добавьтепосле определения класса cahr:
[^a-z0-9]
2. Все слишком верно, 1 за ответ npinti . 🙂
Ответ №3:
Добавить
в класс char:
'my awesome title amp; stuff'.replace(/[^a-z0-9] /gi, '-')
Результат:
"my-awesome-title-stuff"
Ответ №4:
Просто замените последовательные строки дефисов всего на один
slugName = $(this).val().replace(/[^a-z0-9]/gi, '-').replace(/[-] /g, '-')
Комментарии:
1. В дополнительном нет необходимости
replace
, просто добавьтепосле определения класса cahr:
[^a-z0-9]
2. Видя другие, нет необходимости в дополнительной замене, по-видимому, мы можем просто добавить
, который, кажется, останавливает кратные числа или что-то в этом роде?
3. Да, вы правы, я ответил быстро, не подумав о простейшем решении.