Відмінності між версіями «Регулярні вирази в JavaScript»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
Рядок 52: Рядок 52:
 
   ? - Знак питання;
 
   ? - Знак питання;
 
   + - Плюс.
 
   + - Плюс.
 +
<font color=Mediumblue>'''Спецсимволи в регулярному виразі'''</font><br>
 +
 +
<div style="margin-left: 3em; margin-top: 1em; margin-bottom: 2em">
 +
        <table border="1" cellpadding="5" cellspacing="0">
 +
          <tr>
 +
            <th>Символ</th>
 +
            <th>Значення</th>
 +
          </tr>
 +
 +
          <tr>
 +
            <td align=center> <strong>\</strong> </td>
 +
            <td> Для звичайних символів - робить їх спеціальними. Наприклад, вираз / s / шукає просто символ 's'. А якщо поставити \ перед s, то / \ s / вже позначає пробільний сімвол.І навпаки, якщо символ спеціальний, наприклад *, то \ зробить його просто звичайним символом "зірочка". Наприклад, / a * / шукає 0 або більше поспіль йдуть символів 'a'. Щоб знайти а із зірочкою 'a *' - поставимо \ перед спец. символом: / a \ * /. </td>
 +
          </tr>
 +
          <tr>
 +
            <td align=center><strong>^</strong></td>
 +
            <td>Позначає початок вхідних даних. Якщо встановлений прапор багаторядкового пошуку ("m"), то також спрацьовує при початку нової рядка. Наприклад, / ^ A / не знайде 'A' в "an A", але знайде перші 'A' в "An A."</td>
 +
          </tr>
 +
          <tr>
 +
            <td><strong>$</strong></td>
 +
            <td><Позначає кінець вхідних даних. Якщо встановлений прапор багаторядкового пошуку, то також спрацює в кінці рядка. Наприклад, / t $ / не знайде 't' в "eater", але знайде - в "eat".</td>
 +
          </tr>
 +
 +
          <tr>
 +
            <td>Number</td>
 +
            <td>без змін</td>
 +
          </tr>
 +
          <tr>
 +
            <td>String</td>
 +
            <td>якщо рядок містить правильне число (можливо з пробілами перед та / або після нього),
 +
              то це число; <strong>NaN</strong> в іншому випадку</td>
 +
 +
          </tr>
 +
          <tr>
 +
            <td>Object</td>
 +
            <td>результат перетворення значення об'єкта за замовчуванням</td>
 +
          </tr>
 +
        </table>
 +
      </div>

Версія за 10:41, 6 травня 2010

Регулярні вирази - це формальна мова пошуку і здійснення маніпуляцій з підрядка в тексті, заснований на використанні метасимволів (символів-джокерів, англ. Wildcard characters). По суті це рядок-зразок, що складається з символів і метасимволів і задає правило пошуку.
Регулярні вирази використовуються деякими текстовими редакторами та допоміжних інструментах для пошуку та підстановки тексту. Наприклад, за допомогою регулярних виразів можна задати шаблони, що дозволяють:

  • Знайти всі послідовності символів «коробка» у будь-якому контексті, як то: «коробка», «король»;
  • Знайти окремо слово «кіт» і замінити його на «кішка»;
  • Знайти слово «кіт», якому передує слово «персидський» або «чеширский»;
  • Прибрати з тексту всі пропозиції, в яких згадується слово кіт або кішка.

Регулярні вирази дозволяють задавати і набагато більш складні шаблони пошуку або заміни.

Об'єкт RegExp

Створення

/ / Повна форма запису
var expr = new RegExp(pattern [, flags]);
/ / Скорочена форма запису (літеральний формат)
var expr = /pattern/flags;

Аргументи
pattern - шаблон пошуку (текст регулярного виразу).
flags - способи пошуку за шаблонами:

  • G - глобальний пошук (обробляються всі збіги з шаблоном пошуку);
  • I - не розрізняти рядкові і заголовні букви;
  • M - багаторядковий пошук.

Порядок вказівки прапорів не має значення.
Опис, приклади
Коли регулярний вираз створюється за допомогою конструктора new RegExp (...), необхідно пам'ятати, що зворотні слеш (\) повинні екранувати, наприклад:

 varexpr = newRegExp('\\w', 'ig');

При використанні літерального формату, цього робити не потрібно:

var expr = /\w/gi;

Обидві запису еквівалентні. Перший варіант може знадобиться, якщо вам доведеться генерувати регулярне динамічно.
Регулярні вирази використовуються методами exec і test об'єкта RegExp і методами match, replace, search і split об'єкта String. Якщо нам потрібно просто перевірити, чи містить даний рядок підрядок, відповідну зразком, то використовуються методи test або search. Якщо ж нам необхідно витягти підрядок (або підрядка), відповідні зразком, то нам доведеться скористатися методами exec або match. Метод replace забезпечує пошук заданої підрядка і заміни її на інший рядок, а метод split дозволяє розбити рядок на кілька підрядка, грунтуючись на регулярному виразі або звичайною текстовому рядку.
Види символів
У регулярних виразах розрізняють наступні види символів:
Звичайні символи

 A.. Z - англійські літери від A до z, малі й великі;
 0 .. 9 - цифри;
{} - фігурні дужки, крім випадків, коли вони складають групу виду (n, m) (де n і m - числа) і її варіації;
 = - рівне;
 < - Менше;
 > - Більше;
 - - Мінус;
 , - Кома;
  та ін.

Спеціальні символи

() - Круглі дужки;
[] - Квадратні дужки;
 \ - Обраний слеш;
 . - Точка;
 ^ - Ступінь;
 $ - Знак долара;
 | - Вертикальна лінія;
 ? - Знак питання;
 + - Плюс.

Спецсимволи в регулярному виразі

Символ Значення
\ Для звичайних символів - робить їх спеціальними. Наприклад, вираз / s / шукає просто символ 's'. А якщо поставити \ перед s, то / \ s / вже позначає пробільний сімвол.І навпаки, якщо символ спеціальний, наприклад *, то \ зробить його просто звичайним символом "зірочка". Наприклад, / a * / шукає 0 або більше поспіль йдуть символів 'a'. Щоб знайти а із зірочкою 'a *' - поставимо \ перед спец. символом: / a \ * /.
^ Позначає початок вхідних даних. Якщо встановлений прапор багаторядкового пошуку ("m"), то також спрацьовує при початку нової рядка. Наприклад, / ^ A / не знайде 'A' в "an A", але знайде перші 'A' в "An A."
$ <Позначає кінець вхідних даних. Якщо встановлений прапор багаторядкового пошуку, то також спрацює в кінці рядка. Наприклад, / t $ / не знайде 't' в "eater", але знайде - в "eat".
Number без змін
String якщо рядок містить правильне число (можливо з пробілами перед та / або після нього), то це число; NaN в іншому випадку
Object результат перетворення значення об'єкта за замовчуванням