Проблемы с созданием регулярных выражений в JavaScript - PullRequest
0 голосов
/ 09 октября 2011

Я работаю над регулярным выражением (фактически, регулярными выражениями), которое удовлетворит мои потребности.:)

Мне нужно заменить данную строку (названную title) и вернуть slug:

  1. Заменить один пробел одним подчеркиванием в местах, где естьодин пробел.Если имеется более одного пробела, следует заменить только один пробел.Это сложно объяснить, но я постараюсь объяснить на примере.Hi and hello, world! будет Hi_and_hello,_world!, но если перед «миром» будет, например, два пробела, это будет Hi_and_hello,_ world!,

  2. Заменить все оставшиеся белые-пространства без ничего (''),

  3. Заменить все нежелательные символы (белый список: a-z, A-Z, 0-9 и подчеркивание).Другими словами, если символ отсутствует в белом списке, его следует заменить ничем (''),

  4. Обрезать начало и конец от подчеркивания;

Конечный результат должен быть:

Hello, world! I'm known as daGrevis. :)

... до:

Hello_world_Im_known_as_daGrevis

Всето, что мне нужно сделать в JavaScript.Вот что я получил до сих пор:

slug = title.replace(/\s+/g, '_');
slug = title.replace(/\s+/g, '');
slug = title.replace(/[^\w0-9a-zA-Z]/g, '');

Я плохо разбираюсь в регулярных выражениях, так что не смейтесь надо мной.: D Спасибо за совет!

Ответы [ 2 ]

3 голосов
/ 09 октября 2011

Другими словами:

  1. Заменить все последовательные пробелы одним подчеркиванием
  2. Удалить все ненужные символы
  3. Удалить подчеркивания в начале и конце

Итак:

var slug = title.replace(/\s+/g, '_');
slug = slug.replace(/[^0-9a-z_]/gi, '');
slug = slug.replace(/^_+|_+$/g, "");
  • \s+ соответствует максимально возможному количеству последовательных пробелов (пробел, символ новой строки, табуляция, ..), насколько это возможно
  • /g является глобальным флагом, означает: «выбрать каждое совпадение»
  • /[^a-z0-9_]/gi означает: все, что не является буквенно-цифровым символом или подчеркиванием, нечувствительно к регистру
  • ^ и $маркеры начала и конца строки.^_+|_+$/g означает: сопоставить каждое подчеркивание в начале и конце строки

Не забудьте выполнить следующие замены на slug вместо title.В противном случае вы «забудете» свои предыдущие замены.

0 голосов
/ 09 октября 2011

Вот как бы я это сделал:

slug = title.replace(/[^\s\w]+/g, '').replace(/\s+/g, '_').replace(/^_|_$/g, '');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...