- Разминаем мозг регулярными выражениями — Regex Tuesday Challenge
- 1. Выделяем повторяющиеся слова (Ссылка ведет на задачу)
- 2. Оттенки серого
- 3. Даты найти строки сответствующем этому шаблону: YYYY/MM/DD HH:MM(:SS)
- 4. Курсив в MarkDown
- 5. Числа
- 6. IPv4 адреса
- 7. Доменные имена
- 8. Повторяющиеся пункты в списке MarkDown
- 9. Ссылки в MarkDown
- 10. Делим предложение на токены.
- 11. Буквы в алфавитном порядке.
- 12. Исправляем пробелы
- 13. Повторяющиеся слова друг под другом
- 14. Брутфорсим химические элементы
- 15. Музыкальные аккорды
- 16. Брутфорсим химические элементы
- 17. Регулярное выражение для регулярного выражения.
- 18. IRC — Сообщения
- Проверка JavaScript с регулярным выражением — Упражнения, Практика, Решение
- Проверка JavaScript с регулярным выражением [21 упражнение с решением]
Разминаем мозг регулярными выражениями — Regex Tuesday Challenge
Я хочу предложить вам поломать голову вечерок-другой над интересными задачками, на регулярные выражения, которые Callum Macrae выкладывает на своем сайте на GitHub каждый Вторник.
Каждый вопрос представлен в виде набора тестов. Задача — написать такой регулярное выражение, чтобы все тесты стали зелеными.
Некоторые из задач сами по себе довольно простые, а самая интересная часть — в том, чтобы написать наиболее короткое возможное регулярное выражение.
Тесты используют JavaScript Regex движок вашего браузера, который обладает всеми основными возможностями PCRE. Подробнее можно посмотреть тут (англ.) , в колонке ECMA в таблице.
Я собрал в этой статье русские версии задач и материалов, которые могут помочь в их решении. Было бы интересно увидеть самые интересные решения в комментах.
UPD: В регулярных выражениях ECMAScript нету ретроспективных проверок.
1. Выделяем повторяющиеся слова (Ссылка ведет на задачу)
Задача:
Выделить тегом повторяющиеся слова.
Примеры:
2. Оттенки серого
Задача:
Выбрать отенки серого в разных цветовых системах.
Почитать про цвета можно по этой ссылке.
Примеры:
3. Даты найти строки сответствующем этому шаблону: YYYY/MM/DD HH:MM(:SS)
Задача:
Выбрать существующие даты между 1000 и 2012 годом. Секунды могут быть опущены.
Автор облегчает задачу: в каждом месяце 30 дней.
Примеры:
4. Курсив в MarkDown
Задача:
Преобразовать текст, обрамленный в звездочки, в курсив. Не трогать текст в двойных звездочках (жирный).
Почитать подробнее про MarkDown можно в википедии.
Примеры:
5. Числа
Задача:
Выбрать числа с запятой или пробелом, в качестве разделителя разрядов. (к счастью обошлось без моммайе)
Примеры:
6. IPv4 адреса
Задача:
Выбрать IPv4 адреса во всех возможных, представлениях: десятичном, шестнадцатеричном и восьмеричном. С точками и без. Подробнее про IP адреса можно узнать в википедии
7. Доменные имена
Задача:
Доменные имена для протоколов http и https, с необязательным слешем в конце. Специальые символы не используются.
8. Повторяющиеся пункты в списке MarkDown
Задача:
Найти и выделить жирным (**) повтряющиеся пункты в MarkDown-списке.
Примеры:
9. Ссылки в MarkDown
Задача:
Преобразовать MarkDown ссылки в HTML. Выглядят вот так: [text](http://example.com)
Главное не перепутать с картинками: ![alt text](image location)
Примеры:
10. Делим предложение на токены.
Задача:
Разбить предложение на токены. Это может быть полезно, например, для поисковой системы.
- Несколько слов в кавычках должны попасть в один токен
11. Буквы в алфавитном порядке.
Задача:
Выбрать последовательность неповторяющихся символов в алфавитнои порядке.Пробелы нужно игнорировать. К сожалению известные мне решения не очень удачны.
Примеры:
12. Исправляем пробелы
Задача:
Убрать повторяющиеся пробелы и знаки табуляции, оставить по одному пробелу между словами и по два между предложениями.
Примеры:
13. Повторяющиеся слова друг под другом
Задача:
Выбрать повторяющиеся слова, которые находятся непосредственно друг под другом.
Предполагается использование моноширинного шрифта. Строки длиннее 32х символов переносятся.
Примеры:
14. Брутфорсим химические элементы
Задача:
>Выбираем первые 50 химических элементов таблицы менделеева. Решение довольно очевидное, поэтому задача — найти максимально короткое решение.
15. Музыкальные аккорды
Задача:
Выбрать музыкальные аккорлы, например как Cmin, или Bmaj. Нужны и краткая и полная записи. Для данной задачи предпложим, что аккорды E♯, B♯, F♭ and C♭ не существует.
Так же обратите внимание, что диез (♯)
это не то же самое, что решетка (#).
Примеры:
16. Брутфорсим химические элементы
Задача:
Выбрать химические элементы с атомным числом больше 50.
Примеры:
17. Регулярное выражение для регулярного выражения.
Задача:
Выбрать правильно построенное регулярное выражение.Для начала ограничимся литералами (возможно экранированными), классами и несколькими квантификаторами.
Примеры:
18. IRC — Сообщения
Задача:
Выбрать правильно сформированное IRC сообщение.
Вот ссылка на русскую версию спецификаци.
Проверка JavaScript с регулярным выражением — Упражнения, Практика, Решение
Проверка JavaScript с регулярным выражением [21 упражнение с решением]
[ Внизу страницы доступен редактор для написания и выполнения сценариев. ]1. Напишите программу JavaScript, чтобы проверить, является ли первый символ строки прописным или нет. Перейти к редактору
Нажмите меня, чтобы увидеть решение
2. Напишите программу JavaScript для проверки номера кредитной карты. Перейти к редактору
Нажмите меня, чтобы увидеть решение
3. Напишите шаблон, который соответствует адресам электронной почты. Перейти к редактору
Часть личной информации содержит следующие символы ASCII.
- Прописные (AZ) и строчные (az) английские буквы.
- Цифры (0-9).
- Персонажи ! # $% & ‘* + — / =? ^ _ ` <| >~
- Символ . (точка, точка или полная остановка) при условии, что это не первый или последний символ, и он не будет приходить один за другим.
4. Напишите программу на JavaScript для поиска даты в строке. Перейти к редактору
5. Напишите программу на JavaScript, которая работает как функция обрезки (строка) с использованием регулярного выражения. Перейти к редактору
6. Напишите программу на JavaScript для подсчета количества слов в строке. Перейти к редактору
Примечание :
— Удалить пробел из начальной и конечной позиции.
— Конвертировать 2 или более пробелов в 1.
— Исключить перевод строки с начальным интервалом.
7. Напишите функцию JavaScript, чтобы проверить, является ли данное значение значением IP или нет. Перейти к редактору
8. Напишите функцию JavaScript для подсчета количества гласных в данной строке. Перейти к редактору
Тестовые данные :
console.log (alphabetize_string (‘Соединенные Штаты’));
Выход :
«SUadeeinsttt»
9. Напишите функцию JavaScript, чтобы проверить, является ли данное значение допустимым URL-адресом или нет. Перейти к редактору
10. Напишите функцию JavaScript, чтобы проверить, является ли данное значение буквенно-цифровым или нет. Перейти к редактору
11. Напишите функцию JavaScript, чтобы проверить, является ли данное значение временной строкой или нет. Перейти к редактору
12. Напишите функцию JavaScript, чтобы проверить, является ли данное значение почтовым индексом США или нет. Перейти к редактору
13. Напишите функцию JavaScript, чтобы проверить, является ли данное значение почтовым индексом Великобритании или нет. Перейти к редактору
14. Напишите функцию JavaScript, чтобы проверить, является ли данное значение почтовым индексом Канады или нет. Перейти к редактору
15. Напишите функцию JavaScript, чтобы проверить, является ли данное значение номером социального страхования или нет. Перейти к редактору
16. Напишите функцию JavaScript, чтобы проверить, является ли данное значение шестнадцатеричным значением или нет. Перейти к редактору
17. Напишите функцию JavaScript, чтобы проверить, является ли данное значение шестнадцатеричным значением или нет. Перейти к редактору
18. Напишите функцию JavaScript, чтобы проверить, представляет ли данное значение домен или нет. Перейти к редактору
19. Напишите функцию JavaScript, чтобы проверить, является ли данное значение HTML или нет. Перейти к редактору
20. Напишите функцию JavaScript, чтобы проверить, что данное значение содержит альфа, тире и подчеркивание. Перейти к редактору
21. Напишите функцию JavaScript для вывода целого числа с запятыми в качестве разделителей тысяч. Перейти к редактору
Тестовые данные:
console.log (thousands_separators (1000));
«1000»
console.log (thousands_separators (10000.23));
«10,000.23»
console.log (thousands_separators (100000));
«100000»
Еще не все !
* Чтобы запустить код, наведите курсор мыши на панель результатов и нажмите кнопку «RERUN». *
Демонстрация в реальном времени: