Регулярное выражение JavaScript заменяется, если встречается более n раз

#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. Да, вы правы, я ответил быстро, не подумав о простейшем решении.