Посібник для початківців для регулярних виразів (Regex)
Регулярний вираз - це набір символів, що формують шаблон, який можна шукати в рядку. Regex можна використовувати для перевірка наприклад, для перевірки номерів кредитних карт пошук через складні текстові збіги і для замінити відповідний текст з іншим рядком. Він також має велику підтримку кількох мов - дізнайтеся його один раз, і ви можете використовувати його на багатьох мовах програмування.
Я бачив, як мало хто бере перший погляд на регулярні виразу, і повністю його ігнорує. Я не звинувачую їх; Синтаксис regex є складним і змусить багатьох критися, як і мови командного рядка, тільки гірше. Але тоді кожна нова річ страшна і здається неможливо навчитися спочатку. Отже, запозичуючи слова Горація, я скажу це; Почніть, будьте сміливими і наважившись бути мудрими.
Про Regex
Regex мав свої корені в неврології і математиці і був реалізований тільки в програмуванні в 1968 році Кен Томпсон в текстовому редакторі QED для текстового пошуку. Тепер це частина багатьох мов програмування, таких як Perl, Java, Python, Ruby і JavaScript.
Давайте подивимося на деякі приклади того, як працює регулярний вираз.
Я буду використовувати JavaScript у своїх прикладах. Тепер, щоб пройти початковий рівень, потрібно вивчити все символи, класи, квантори, модифікатори і методи використовується в регулярних виразах. Ось посилання на сторінку регулярного вираження Мережі розробників Mozilla, де можна переглянути таблицю, що містить усі ці. Ви також можете звернутися до чіпсета в кінці цієї публікації з найбільш використовуваними символами.
Подивимося простий приклад з поясненням. Це регулярний вираз.
Це те, що наведений вище регулярний вираз буде шукати в рядку, символ 'B', за яким принаймні один з будь-якого символу між (і включаючи) 'a' до 'z', 'A' до 'Z' і цифрами 0 9.
Нижче наведено зразок відповідностей у рядку:
Кошик, лампа, B12 вітамін, BaSO4, N До н.е. компанії
Вищевказаний регулярний вираз припинить пошук у Кошик і повернути позитивну відповідь. Це тому глобальний модифікатор "g
потрібно вказати якщо ви хочете, щоб регулярний вираз вивчав всі можливі матчі.
Тепер давайте подивимося, як використовувати цей вираз у JavaScript. The тест
Метод виходить: якщо знайдений матч повернення вірно
, інше помилковий
.
var input = "ваша тестова рядок", regex = / B [a-zA-Z d] + /; if (! regex.test (вхід)) попередження ("Не знайдено відповідності"); else alert ("Знайдено відповідність");
Спробуємо інший метод: матч
повертає збіги, знайдені в масиві.
var input = "ваш тестовий рядок", regex = / B [a-zA-Z d] + / g, / * Я додав глобальний модифікатор 'g' до регулярного виразу, щоб отримати всі збіги * / ary = input.match (regex); if (ary === null) попередження ("Не знайдено відповідності"); else alert ('збіги:' + ary.toString ());
Як про рядок замінити
? Давайте спробуємо це з regex зараз.
var input = "ваша тестова рядок", regex = / B [a-zA-Z d] + / g; alert (input.replace (регулярний вираз, "#"));
Нижче наведено кодовий код для налаштування. Натисніть вкладку "JavaScript", щоб переглянути код JS.
Вправи
Для вправ можна Google “виконання вправ” і спробуйте вирішити їх. Ось що можна очікувати при спробах цих вправ, відповідно до рівнів складності.
Основний
Мені це вдається перевірити пароль достатньо для початку. Отже, перевірте пароль на довжину від 8 до 16 символів, дозволений алфавітно-цифровий вибір спеціальних символів.
Проміжний
Тут треба тренуватися з більш реальними даними і дізнатися ще кілька точок регулярного виразу Подивимося вгору, дивимося за свої твердження і відповідні групи;
- Перевірити PIN-коди, шістнадцяткові коди, дати, ідентифікатор електронної пошти, плаваючу крапку.
- Замініть кінцевий нуль, пробіли, набір відповідних слів
- Витягніть різні частини URL-адреси
Додатково
Ви можете оптимізувати рішення вищевказаних вправ - найоптимальніший регулярний вираз для електронної пошти - це тисячі символів візьміть його настільки, наскільки вам комфортно, і цього достатньо. Можна також спробувати:
- Розбір HTML або XML (хоча в реальному світі це не рекомендується робити, тому що використання регулярних виразів для розбору нерегулярних мов, таких як HTML, ніколи не зробить його надійним.
- Заміна тегів
- Видалення коментарів (за винятком умовних коментарів IE)
Інструменти
Інструменти для візуалізувати регулярний вираз є одним з найхолодніших речей там для мене. Якщо ви коли-небудь стикалися з довгим складним регулярним виразом, просто скопіюйте їх у один з цих інструментів, і ви зможете переглядати потік. Крім того, існує безліч інструментів, які можна використовувати для того, щоб возитися з кодом регулярних виразів. Вони також демонструють приклади та чіпсити разом із функціями спільного використання.
- Debuggex - він малює діаграму регулярних виразів відповідно до ваших вхідних даних, і ви можете швидко зробити спільний доступ до StackOverflow прямо звідти.
- RegExr - Ви можете перевірити свій регулярний вираз з цим. Він також отримав посилання, чіпсет і приклади, щоб допомогти вам.
- Refiddle - На даний момент, крім JavaScript, ви також можете скрипнути Ruby і .NET версії regex в ньому.
Regex Cheatsheet
Маркер | Визначення |
[abc] | Будь-який окремий символ a, b або c |
[^ abc] | Будь-який символ, крім a, b або c |
[a-z] | Символ між (включаючи) від a до z |
[^ a-z] | Символ, крім від a до z |
[A-Z] | Характер між (включаючи) від A до Z |
. | Будь-який окремий символ |
s | Будь-який пробіл |
S | Будь-який символ без пробілів |
d | Будь-яка цифра від 0 до 9 |
D | Будь-яка незначна |
w | Будь-який символ слова (буква, номер і підкреслення) |
W | Будь-який несимвольний символ |
(…) | Захоплення все укладене |
(a | b) | Відповідає або a або b |
a? | Характер а або відсутній, або присутній один раз |
a * | Характер а або відсутній, або присутній більше разів |
a+ | Характер a присутній один або кілька разів |
a 3 | 3 послідовності характеру |
a 3, | 3 або більше подій символу послідовно |
a 3,6 | 3 до 6 виступів символу послідовно |
^ | Початок рядка |
$ | Кінець рядка |
b | Межа слова. Якщо символ - символ останнього або першого слова, або Якщо символ знаходиться між словом або немовним символом |
B | Границя без слова |