Java Script підручник | Дужкові групи в регулярних виразах
- Дужкові групи в регулярних виразах Доброго дня! У цьому уроці ми з вами розберемося що таке дужкові...
- Вкладені дужкові групи
- Виняток з запам'ятовування через?:
- ПІДСУМКИ
- завдання
- розібрати вираз
Дужкові групи в регулярних виразах
Доброго дня! У цьому уроці ми з вами розберемося що таке дужкові групи в регулярних виразах і навіщо вони потрібні. Ви можете якусь частину шаблону регулярного виразу укласти (...). Ось такі частини шаблону і називають «Дужковий виразами» або «Дужковий групами».
У них є 2 переваги.
- Дозволяє виділити частину збіги в елемент масиву при пошуку через методи регулярних виразів .
- А ось якщо поставити квантіфікатор після дужки, то він буде застосовуватися до всієї скобці, а не до одного символу.
Розглянемо приклад шаблон (get) + знаходить один або більше повторюваних 'get':
alert ( 'Getgetget now!'. match (/ (get) + / i)); // "Getgetget"
Без дужок ж, шаблон / get + / вказував би на g, після якого йде одна або більше et, наприклад: geetttt. А дужки раз і групують (get) разом.
вміст групи
Дужки можуть нумеруватися зліва направо. Движок запам'ятає кожну дужку і дозволить звернеться до неї - в шаблоні або в рядку заміни.
Наприклад, для того щоб знайти HTML-тег використовується ось такий шаблон <. *?>.
Якщо ви захочете щось зробити з результатом, то тоді можна зробити висновок вміст <...> в дужки: <(. *?)>. Тоді воно вам буде доступно окремо.
При пошуку методом match в масиві буде спочатку все збіг, а далі - дужкові групи. У шаблоні <(. *?)> Дужковий група тільки 1:
var str1 = '<h1> Привіт, JavaScript! </ h1>'; var reg1 = /<(.*?)>/; alert (str1.match (reg1)); // масив: <h1>, h1
Слід зауважити, що метод match може видавати дужкові групи тільки при пошуку без прапора / ... / g.
Для того, щоб була можливість шукати і з прапором / ... / g і зі Дужковий групами, використовується метод exec:
var str1 = '<h1> Привіт, Javascript! </ h1>'; var reg1 = /<(.*?)>/g; var match1; while ((match1 = reg1.exec (str1))! == null) {// спочатку перший збіг: <h1>, h1 // потім друге збіг: </ h1>, / h1 alert (match1); }
Тепер як видно знайдено 2 збіги <(. *?)>.
Вкладені дужкові групи
Дужки також можуть бути і вкладеними. В такому випадку нумерація йде зліва направо.
Наприклад, при пошуку тега в <div class = "my»> нас може цікавити:
- Вміст тега цілком: div class = "my».
- А ось в окрему змінну хотілося б помістити тег: div.
- Також для зручності можна окремо виділити атрибути class = "my».
Давайте додамо дужки в регулярний вираз:
var str1 = '<div class = "my">'; var reg1 = / <(([az] +) \ s * ([^>] *))> /; alert (str1.match (reg1)); // <div class = "my">, div class = "my", div, class = "my"
Давайте розберемо по докладніше дужкові групи.
На нульовому місці - йде завжди повний збіг, далі - слідують групи. Нумерація завжди буде йти зліва направо, по відкриває скобці.
У нашому випадку група 1 включає в себе також і вміст груп 2 і 3. Це нормальна ситуація, яка може виникати, коли вам потрібно виділити щось окреме всередині однієї більшої групи.
Для прикладу, розглянемо регулярку a (b)? (D) ?. Вона шукає «a», за якої не обов'язково йде буква «b», за якою необов'язково йде буква «d».
Якщо застосувати його на рядок з однієї літери «a», то отримаємо:
var match = 'a'.match (/ a (b)? (d)? /) alert (match.length); // 3 alert (match [0]); // a alert (match [1]); // undefined alert (match [2]); // undefined
Як бачите масив вийшов довжиною 3, але при цьому все дужкові групи - undefined.
Виняток з запам'ятовування через?:
Іноді трапляється так, що дужки потрібні, щоб квантіфікатор правильно применился, а ось в масиві ця група не потрібна.
Для того щоб виключити дужкову групу з масиву потрібно просто в початок цієї групи додати?:.
Для прикладу ви хочете знайти (gu) +, але ось вміст дужок (gu) в масив записувати не хочемо.
Для цього треба відразу ж після відкриває дужки поставити?: (?: Gu) +.
наприклад:
var str1 = "Gogo John!"; var reg1 = / (?: go) + (\ w +) / i; var result1 = str1.match (reg); alert (result1.length); // 2 alert (result1 [1]); // John
В даному прикладі масив результатів матиме довжину 2 і містити тільки повний збіг і результат (\ w +). Це може стати в нагоді коли вміст дужок нас не цікавить.
ПІДСУМКИ
Дужкові групи потрібні для угруповання
завдання
Знайдіть колір в форматі #abc
Вам треба написати регулярний вираз, яке зможе знаходити колір в форматі #abc.
var re1 = / * ваш регексп * / var str1 = "color: # 3f5; background-color: # AA00eа; and: #abcd"; alert (str1.match (re1)); // # 3f3 # AA0ef
розібрати вираз
Арифметичний вираз складається з двох чисел і операції між ними, наприклад:
- 1 + 4
- 1.2 * 3.6
- -3 / -8
- -2 - 2
Список операцій: «+», «-«, «*» і «/». Також допускаються пробіли навколо оператора і чисел. Вам треба написати функцію, яка буде отримувати на вхід вираз і повертати масив з 3 аргументів:
- Перше число.
- Оператор.
- Друге число.
Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту і натисніть Ctrl + Enter.
також читайте
Для прикладу, розглянемо регулярку a (b)?D) ?
Match (/ a (b)?
D)?
Виняток з запам'ятовування через?
Для того щоб виключити дужкову групу з масиву потрібно просто в початок цієї групи додати?
Для цього треба відразу ж після відкриває дужки поставити?