Регулярні вирази в javascript

  1. Примірник об'єкта типу RegExp
  2. прапори
  3. Оператори
  4. фіксації
  5. нефіксіруемие групи
  6. функція test
  7. Javascript
  8. Javascript
  9. Javascript
  10. функція exec
  11. Javascript
  12. Javascript
  13. Javascript

Примірник об'єкта типу RegExp

new RegExp (pattern [, flags])

якщо

регелярное вираз ЗАРАНЕЕ

відомо, то краще синтаксис литерала (/ test / i).

Якщо ж регулярний вираз заздалегідь невідомо, то краще створювати регулярний вираз (в символьному рядку) за допомогою конструктора (new RegExp).

Але зверніть увагу, так як "знак косою риси" \ грає роль перемикання коду, то в строковому літереале (new RegExp) його доводиться писати двічі: \\

прапори

i ігнорування регістра при зіставленні

g глобальне зіставлення, на відміну від локального (за замовчуванням, збіг тільки з першим примірником шаблоном) допускає збігу з усіма примірниками шаблону

Оператори

Що Як Опісініе Використання i прапор робить рег. вираз не залежних від регістра / testik / ig прапор глобальний пошук / testik / gm прапор допускає зіставлення з багатьма рядками, які можуть бути отримані з textarea [] оператор класу символів зіставлення з набором символів [az] - будь-який символ в інтервалі від a до z ; ^ Оператор знак вставки крім [^ az] - будь-який символ КРІМ символів в інтервалі від a до z; - оператор дефіс вказуємо діапазон значень, включно [az] - будь-який символ в інтервалі від a до z; \ Оператор екранування екранує будь-який наступний символ \\ ^ оператор початку зіставлення зіставлення з шаблоном має відбутися на початку / ^ testik / g $ оператор кінця зіставлення зіставлення з шаблоном має відбутися в кінці / testik $ / g? оператор? робить символ необов'язковим / t? est / g + оператор + символ повинен прісутстовать одноразово або багаторазово / t + est / g + оператор + символ повинен прісутстовать одноразово або багаторазово / t + est / g * оператор * символ повинен прісутстовать одноразово або багаторазово або взагалі відсутні / t + est / g {} оператор {} задаємо фіксоване число повторень символу / t {4} est / g {,} оператор {,} задаємо число повторень символу в певних межах / t {4,9} est / g

Зумовлені класи символів

Зумовлений член Зіставлення \ t горизонтальна табуляція \ n Переклад рядка. Будь-який символ, крім переведення існуючих рядки \ d Будь-яка десят-я цифра, що рівнозначно [0-9] \ D Будь-який символ, крім десят-я цифри, що рівнозначно [^ 0-9] \ w Будь-який символ (цифри, букви і знак підкреслення) що рівнозначно [A-Za-z0-9] \ W Будь-який символ, крім цифр, букв і знака підкреслення, що рівнозначно [^ A-Za-z0-9] \ s Будь-який символ пробілу \ S Будь-який символ, крім пробілу \ b Кордон слова \ B НЕ Кордон слова, а його внутр. частина

Групування ()

Якщо оператор, наприклад, + (/ (abcd) + /) потрібно застосувати до групи члеров, то можна скористатися круглими дужками ().

фіксації

Частина регулярного виразу, укладена в круглі дужки (), називиется фіксацією.

Зворотні посилання на фіксації позначаються зворотною косою межею (\) і номером фіксації, наприклад, \ 1, \ 2.

Розглянемо наступний приклад:

/ ^ ([Abc]) k \ 1 /

\ 1 це не будь-який символ з a, b, c.
\ 1 це навіть дуже символ, який ініціює збіг з першим символом. Тобто символ співпав з \ 1 невідомий до дозволу регулярного виразу.

нефіксіруемие групи

Дужки () використовуються в 2-х випадках: для групування і для позначення фіксацій. Але бувають ситуації, коли нам потрібно використовувати () тільки для групування, так як фіксація не потрібно, крім того, прибираючи зайві фіксації ми полегшуємо роботу механізму обробки регулярних виразів.

Отже, щоб запобігти фіксацію перед відкриває круглою дужкою необхідно поставити:?:

str = "<div class = 'test'> <b> Hello </ b> <i> world! </ i> </ div>"; found = str.match (/ <(?: \ /?) (?: \ w +) (?: [^&gt;] *?)> / i); console.log ( "found without fix:", found); // [ "<div class = 'test'>"]

Приклад на jsfiddle.net

функція test

Regexp.test ([str])

Функція test перевіряє, чи є збіг регулярного виразу з рядком (str). Повертає або true або false.

Приклад використання:

Javascript

function codeF (str) {return /^\d{5}-\d{2}/.test(str); } //Console.log(codeF('12345-12ss ')); // true //console.log(codeF('1245-12ss ')); // false

функція match

str.match (regexp)

Функція match повертає масив значень або null, якщо збігів, не знайдено. Відзначте: якщо в регулярному виразі відсутня прапор g (для виконання глобального пошуку), то метод match поверне перший збіг в рядку, при цьому, як видно з прикладу, в масив збігів потрапляють ФІКСАЦІЇ (частина регулярного виразу укладена в круглі дужки).

Javascript

str = "За інформацією зверніться: Глава 3.4.5.1"; re = / глава (\ d + (\. \ d) *) / i // з фиксациями (без глобального прапорця) found = str.match (re) console.log (found); // [ "Глава 3.4.5.1", "3.4.5.1", ".1"]

Якщо ж надати методу match () глобальне регулярний вираз (з прапорцем g), то буде повернутий також масив, але з ГЛОБАЛЬНИМИ збігами. Тобто зафіксовані результати не повертаються.

Javascript

str = "За інформацією зверніться: Глава 3.4.5.1, Глава 7.5"; re = / глава (\ d + (\. \ d) *) / ig // без фіксацій - глобально found = str.match (re) console.log (found); // [ "Глава 3.4.5.1", "Глава 7.5"]

Приклад на jsfiddle.net

функція exec

regexp.exec (str)

Функція exec перевіряє, чи є збіг регулярного виразу з рядком (str). Повертає масив результатів (з фиксациями) або null. При кожному наступному виклику методу exec (наприклад, при використанні while) відбувається (за рахунок автоматичного оновлення при виконанні exec індексу кінця останнього пошуку lastIndex) перехід до наступного глобальному збігом (якщо у казан прапорець g).

Javascript

var html = "<div class = 'test'> <b> BAM! </ b> <em> BUM! </ em> </ div>"; var reg = / <(\ /?) (\ w +) ([^&gt;] *?)> / g; //console.log(reg.exec(html)); // [ "<div class = 'test'>", "", "div", "class = 'test'"] while ((match = reg.exec (html))! == null) {console.log (reg.exec (html)); } / * [ "<B>", "", "b", ""] [ "<em>", "", "em", ""] [ "</ div>", "/", " div "," "] * /

Без глобального прапорця методи match і exec працюють ідентично. Тобто повертають масив з першим глобальним збігом і фиксациями.

Javascript

// match var html = "<div class = 'test'> <b> BAM! </ B> <em> BUM! </ Em> </ div>"; var reg = / <(\ /?) (\ w +) ([^&gt;] *?)> /; // без глобального console.log (html.match (reg)); // [ "<div class = 'test'>", "", "div", "class = 'test'"] // exec var html = "<div class = 'test'> <b> BAM! < / b> <em> BUM! </ em> </ div> "; var reg = / <(\ /?) (\ w +) ([^&gt;] *?)> /; // без глобального console.log (reg.exec (html)); // [ "<div class = 'test'>", "", "div", "class = 'test'"]

функція replace

str.replace (regexp, newSubStr | function)
  • regexp - рег. вираз;
  • newSubStr - рядок, на яку змінюється знайдене вираз в тексті;
  • function - викликається для кожного виявленого збігу зі змінним списком параметрів (нагадаємо, що при глобальному пошуку в рядку виявляються всі екземпляри збіги з шаблоном).

Значення, що повертається даної функції служить в якості заміни.

Параметри функції:

  • 1 - Повна яка збіглася подстрока.
  • 2 - Значення дужкових груп (фіксацій).
  • 3 - Індекс (позиція) поєднання в заданій стрічці.
  • 4 - Вихідна рядок.

Mетод не змінює викликає рядок, а повертає нову, після заміни збігів. Щоб зробити глобальний пошук і заміну, використовуйте regexp c прапором g.

"GHGHGHGTTTT" .replace (/ [AZ] / g, "K"); // "KKKKKKKKKKK"

Javascript

function upLetter (allStr, letter) {return letter.toUpperCase (); } Var res = "border-top-width" .replace (/ - (\ w) / g, upLetter); console.log (res); // borderTopWidth

За допомогою методу replace можна отримати посилання на фіксації. У функцію другим параметром передається номер фіксації; використовується синтаксис виду: $ 1, $ 2, $ 3 і т.д.

Javascript

console.log ( "GHGHGHGTTTT" .replace (/ ([AZ]) / g, "$ 1"). toLowerCase ()); // ghghghgttttОператор?
Обить символ необов'язковим / t?
Gt;] *?
Gt;] *?
Gt;] *?
Gt;] *?