Класи і спецсимволи регулярних виразів
- Класи і спецсимволи регулярних виразів Доброго дня! продовжуємо розглядати Регулярні вирази ...
- Кордон слова \ b
- Зворотні класи регулярних виразів
- Прогалини - звичайні символи
- Точка - це будь-який символ
- Екранування спеціальних символів
- Разом
- завдання
Класи і спецсимволи регулярних виразів
Доброго дня! продовжуємо розглядати Регулярні вирази . Ми вже з вами розібрали патерни регулярних виразів , а також методи регулярних виразів . І в цьому уроці ми з вами познайомимося з спецісмволамі і класами регулярних виразів. Розглянемо таку ось завдання - припустимо є телефонний номер «+38 (905) -123-45-67», і вам потрібно знайти в цьому рядку тільки цифри. А решта символи вас взагалі не цікавлять.
От саме для пошуку символів певного виду в регулярних виразах передбачені «класи символів».
Клас символів - це таке спеціальне позначення, під яке підходить символ з певного набору.
Ось наприклад, є клас «будь-яка цифра». Він позначається як \ d. Це позначення додається в шаблон, і при пошуку під нього підходить вже будь-яка цифра.
Таким чином регулярний вираз / \ d / шукає рівно 1 цифру:
var str1 = "+38 (903) -123-45-67"; var reg1 = / \ d /; // не глобальна шаблон тому шукає тільки 1-ю цифру alert (str.match (reg)); // 7
... Ну а для пошуку всіх цифр треба просто додати прапор g:
var reg1 = / \ d / g; alert (str1.match (reg1)); // масив всіх збігів: 7,9,0,3,1,2,3,4,5,6,7
Найважливіші класи регулярних виразів: \ d \ s \ w
Це був клас для цифр.
Але, є й інші класи
Найбільш часто доводиться стикатися з:
\ D (від англ. «Digit» - «цифра») Цифра, символ від 0 до 9. \ s (від англ. «Space» - «пробіл») Будь-який символ пробілу, включаючи таби, переклади рядки і т.п. \ W (від англійського «word» - «слово») Символ будь-якого «слова», а точніше - буква латинського алфавіту або цифра або підкреслення '_'. Ні-англійські букви не є \ w, таким чином російська буква не підходить.
Ось приклад, \ d \ s \ w позначає цифру, за якої буде йти символ пробілу, а потім символ будь-якого слова.
Регулярний вираз також може містити звичайні символи так і класи.
Ось приклад, HTML \ d знайде рядок HTML, з будь-якою цифрою після неї:
var str1 = "Стандарт HTML5 - це просто здорово"; var reg1 = / HTML \ d / alert (str1.match (reg)); // HTML5
Кордон слова \ b
Кордон слова \ b - це дуже особливий клас.
Він може цікавий тим, що позначає не сам символ, а кордон між символами.
Наприклад, \ bJavaScript \ b знайде слово JavaScript в рядку Hello, JavaScript !, але не в рядку Hello, Java !.
alert ( "Hello, JavaScript!". match (/ \ bJavaScript \ b /)); // JavaScript alert ( "Hello, Java!". Match (/ \ bJava \ b /)); // null
Кордон як правило має «нульову ширину» в тому сенсі, що зазвичай символам регулярного виразу є символи рядка, але не в цьому випадку.
Кордон - це завжди перевірка.
При пошуку регулярний вираз йде за шаблоном і одночасно по рядку, намагаючись побудувати так зване відповідність. Коли він зустрічає \ b, то здійснює перевірку, що позиція в рядку підходить під одну з наступних умов:
- Початок тексту, в разі якщо перший символ \ w.
- Кінець тексту, в разі якщо останній символ \ w.
- Всередині тексту, в разі якщо з одного боку \ w, а з іншого - не \ w.
Зворотні класи регулярних виразів
Для кожного класу є «зворотний йому», представлений такий же, але з великої літери щоб можна було їх розрізняти.
«Зворотний» - означає, що йому доступні всі інші символи, наприклад:
\ D Ні-цифра, тобто будь-який символ окрім \ d, наприклад буква або пробіл. \ S Ні-пробіл, тобто будь-який символ окрім \ s, наприклад буква або цифра. \ W Будь-який символ, крім \ w, тобто не латиницею, що не підкреслення, що не цифра. Зокрема, російські літери належать цього класу. \ B Перевірка, зворотна \ b тобто все крім кордону слова.
На початку цього уроку ми з вами розбирали, як отримати з телефону +38 (903) -123-45-67 всі цифри.
Перший спосіб - знайти всі цифри через match (/ \ d / g).
Зворотні класи допоможуть реалізувати зворотний спосіб - знайти всі Нецифра і видалити їх з рядка:
var str = "+38 (903) -123-45-67"; alert (str1.replace (/ \ D / g, "")); // 389031234567
Прогалини - звичайні символи
Варто відзначити, що в регулярних виразах пробіл - це такий же символ, як і власне інші.
Зазвичай увагу на прогалини ми не звертаємо. На наш погляд рядки 1-6 і 1 - 6 майже однакові.
Однак, якщо движок регулярних виразів не враховуватиме прогалин, то він звичайно не спрацює.
Давайте знайдемо цифри, які розділених дефісом:
alert ( "1 - 6" .match (/ \ d- \ d /)); // null, немає збігів!
Виправимо це, додавши в шаблон прогалини:
alert ( "1 - 6" .match (/ \ d - \ d /)); // збіги будуть знайдені
Слід зазначити що, прогалини в шаблоні потрібні лише тоді, коли ми хочемо їх знайти.
alert ( "1-6" .match (/ \ d - \ d /)); // null, оскільки в рядку 1-6 немає прогалин
Іншими словами в регулярному виразі все символи мають певне значення. І прогалини тому не виключення.
Точка - це будь-який символ
Окремо стоїть такий клас символів як точка «.».
У шаблоні регулярного виразу, точка «.» Позначає просто будь-який символ, крім перекладу рядки:
alert ( "X" .match (/./)); // знайдено X
Посеред регулярного виразу:
var re = /CS.5/; alert ( "CSS5" .match (re)); // знайде "CSS5" alert ( "CS-5" .match (re)); // знайде "CS-5" alert ( "CS 5" .match (re)); // знайде "CS 5" (пробіл це також символ)
Хочу звернути вашу увагу - що точка буде означати саме «довільний символ».
Таким чином якийсь символ на цьому місці в рядку має місце бути:
alert ( "CS5" .match (/CS.5/)); // нет збігів, оскільки для точки немає символу
Екранування спеціальних символів
У регулярних виразах є також і інші символи, які мають якийсь особливий сенс.
Вони можуть використовуватися, щоб розширити можливості пошуку.
Ось власне їх повний список: [\ ^ $. | ? * + ().
Не треба намагатися запам'ятати його - коли ми з вами розберемося з кожним з них окремо, він запам'ятається вам сам собою.
Для того щоб використовувати спеціальний символ в якості звичайного, його слід екранувати.
Або, інакше кажучи перед цим символом треба поставити зворотний слеш '\'.
Наприклад, ми хочемо знайти точку '.'. У шаблоні регулярного виразу вона позначає «будь-який символ, крім нового рядка», тому для того щоб знайти саме сам символ «точка» - її слід екранувати: \ ..
alert ( "Глава 5.2" .match (/ \ d \. \ d /)); // 5.2
Круглі дужки також являють собою спеціальні символи, так що для пошуку з дужками потрібно використовувати екран \ (. Приклад нижче шукає рядок «d ()»:
alert ( "function d ()". match (/ d \ (\) /)); // "d ()"
Ну і сам символ слеш '/', хоча і не буде спеціальними символом в регулярних виразах, але він відкриває-закриває шаблон в синтаксисі / ... pattern ... /, тому його слід екранувати.
Так може виглядати пошук слеша '/':
alert ( "/".match(/\//)); // '/'
Ну і, звичайно якщо нам потрібно знайти сам власне зворотний слеш \, то його просто потрібно задубліровать.
Так може виглядає пошук зворотного слеша «\»:
alert ( "3 \ 2" .match (/ \\ /)); // '\'
Разом
Ми з вами розібрали класи регулярних виразів для пошуку типів символів:
- \ D - цифри.
- \ D - Ні-цифри.
- \ S - прогалини, переклади рядка.
- \ S - все, крім пробілів.
- \ W - латиницею, цифри, підкреслення '_'.
- \ W - все, крім букв.
- '.' - точка позначає абсолютно будь-який символ, крім перекладу рядки.
Якщо хочеться пошукати саме поєднання «\ d» або символ «точка», то його слід екранувати зворотним слешем, ось таким чином: \.
завдання
Знайдіть електронний час
Час має формат годинник: хвилини. І годинник і хвилини можуть складатися з 2 цифр, наприклад: 09:00.
Напишіть регулярний вираз для пошуку часу в рядку: Обід о 09:00.
Знайдіть номер кредитної картки.
Номер кредитної картки як правило складається з 4 груп цифр по 4 в кожній. Вам треба написати регулярний вираз для пошуку номера кредитної картки в рядку.
«Іван вчора втратив свою кредитку, її номер 1178-9087-2384-8787. Тому він пішов в банк і описав ситуацію. Там пішли йому назустріч і видали нову кредитку під номером: 1103-8899-0811-1722. »
Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту і натисніть Ctrl + Enter.