Java Script підручник | Дужкові групи в регулярних виразах

  1. Дужкові групи в регулярних виразах Доброго дня! У цьому уроці ми з вами розберемося що таке дужкові...
  2. Вкладені дужкові групи
  3. Виняток з запам'ятовування через?:
  4. ПІДСУМКИ
  5. завдання
  6. розібрати вираз

Дужкові групи в регулярних виразах

Доброго дня Доброго дня! У цьому уроці ми з вами розберемося що таке дужкові групи в регулярних виразах і навіщо вони потрібні. Ви можете якусь частину шаблону регулярного виразу укласти (...). Ось такі частини шаблону і називають «Дужковий виразами» або «Дужковий групами».

У них є 2 переваги.

  1. Дозволяє виділити частину збіги в елемент масиву при пошуку через методи регулярних виразів .
  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»> нас може цікавити:

  1. Вміст тега цілком: div class = "my».
  2. А ось в окрему змінну хотілося б помістити тег: div.
  3. Також для зручності можна окремо виділити атрибути 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 аргументів:

  1. Перше число.
  2. Оператор.
  3. Друге число.

Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту і натисніть Ctrl + Enter.

також читайте

Для прикладу, розглянемо регулярку a (b)?
D) ?
Match (/ a (b)?
D)?
Виняток з запам'ятовування через?
Для того щоб виключити дужкову групу з масиву потрібно просто в початок цієї групи додати?
Для цього треба відразу ж після відкриває дужки поставити?