Главная

Friday, 17 September 2021

Регулярные выражения.

Всем привет.

Есть такая штука как Регулярные выражения. Тот кто ими пользуется знает что это как еще один язык выучить. И их знание не абы какой плюс при приеме на работу. Но все равно диалекты регулярных выражений в контексте других языков программирования могут быть разными. Я ими пока не владею, потому что "я ведь не волшебник, я только учусь".

А пока могу рекомендовать отличные курсы по регулярным выражениям, на которых страдаю сам:

1. Using Regular Expressions with Kevin Skoglund, lynda.com | Using Regular Expressions (2011).

2. Jeffrey Way - Regular Expressions - Up And Running,

http://code.tutsplus.com/courses/regular-expressions-up-and-running

И на сегодня для вас небольшая шпаргалка по использоваию регулярок с JavaScript.

<script type="text/javascript">

//Создание

var pattern = new RegExp(pattern [, flags]); //Полная форма

var pattern = /pattern/flags; //Сокращенная форма записи (литеральный формат)

//Динамическое создание регулярного выражения

var emails = ['gmail', 'yahoo', 'hotmail', 'live', 'rambler'];

var re = new RegExp(emails.join('|', 'i')); //gmail|yahoo|hotmail|live|rambler/i

/**

где pattern — шаблон регулярного выражения,

     flags — способ поиска, может принимать:

          g — глобальный поиск (обрабатываются все совпадения с шаблоном поиска);

          i — не различать строчные и заглавные буквы;

          m — многострочный поиск.

*/

</script>


Специальные последовательности:

\' — одинарные кавычки (апостроф)

\" — двойные кавычки

\\ — обратный слеш (\u005C)

\b — backspace

\f — form feed

\n — переход на новую строку (\u000A)

\r — возврат каретки (\u000D)

\t — табуляция (\u0009)

\v — вертикальная табуляция

\0 — символ NULL (\u0000)

\ddd — octal sequence (3 digits: ddd)

\xdd — hexadecimal sequence (2 digits: dd). Символ Latin-1, заданный двумя 16-ричными цифрами

\udddd — unicode sequence (4 hex digits: dddd). Символ Unicode, заданный четырьмя 16-ричными цифрами


Операторы регулярного выражения:

\ — обратный слеш, символ экранирования;

. — символ точка(.), означает любой символ, кроме перевода строки (\n);

\w — любой символ ASCII [a-zA-Z0-9_]

\W — противоположное \w [^a-zA-Z0-9_]

\d — любая цифра ASCII [0-9]

\D — противоположное \d [^0-9]

\s — любой символ-разделитель Unicode (\r, \n, \t, \v, пробел, ...)

\S — противоположное \s

= —

! —

: —

| — оператор ИЛИ

/ —

() — выделение групп регулярных выражение для извлечения подстроки

[] — перечень символов. Ищет любой из символов перечисленных в наборе. Можно указать промежуток используя тире. Например: [a-e], то же что и [abcde]. Если нужно найти любой символ не входящий в набор, то шаблон будет выглядеть так: [^abcde], то же, что и [^a-e];

{} — находит повторения. Например:

     {n} — шаблон повторяется точно n раз. Например, /a{3}/ найдет ровно три символа «а» идущих один за другим;

     {n,} — шаблон повторяется не менее n раз. Например, /a{3,}/ найдет 3 или более идущих один за другим символов «а»;

     {n,m} — шаблон повторяется не менее n, но и не более m раз. Например, /a{5,10}/ ищет от 5 до 10 символов «а».


Позиции соответствия:

^ — означает соответствие шаблона с самого начала строки, т.е. выражение /^a/ найдет соответствие если строка начинается строго с символа «а»

$ — означает соответствие шаблона с концом строки, т.е. выражение /php$/ найдет соответствия только если строка заканчивается «php»

\b — позиция между символом ASCII [a-zA-Z0-9_] и не символом ASCII [^a-zA-Z0-9_] (граница слова)

\B — позиция между двумя символами ASCII (не граница слова)


Квантификаторы:

* — эквивалентно {0,} (может не быть, а может сколько угодно быть)

+ — эквивалентно {1,} (минимум одно вхождение, но должно быть)

? — эквивалентно {0,1} (может быть, а может не быть)


Флаги — способы поиска по шаблону. Порядок указания флагов не имеет значения:

     i — поиск без учета регистра;

     m — многострочный поиск;

     g — глобальный поиск (обрабатываются все совпадения с шаблоном поиска).


Методы регулярного выражения:

     test() — обратно методу search() проверяет совпадение регулярного выражения в передаваемой строке. Возвращает true если совпадения есть, иначе false;

     exec() — возвращает массив с результатами поиска по шаблону, если совпадений нет, то возвращается null.


Примеры:

<script type="text/javascript">

     //Экранирование

"folder/file.js".search(/\//); //6; экранирование прямого слеша

     //[abcd]

/[abcde]/.test("protocol"); //true; найден символ «c» указанный в наборе

     //[^abcd]

"nnmclub".search(/[^a-n]/); //1; найден символ «u». Первый символ не входящий в набор

     //повторения {n}, {n,m}, {n,}

var str = "JavaScript — объектно-ориентированный язык. Но используемое в языке прототипирование обуславливает отличия в работе с объектами по сравнению с традиционными класс-ориентированнннными языками";

str.search(/н{1}/); //19; символ «н», который повторяются ровно 1 раз

str.search(/н{2,5}/); //33; символ «н», который может повторятся от 2 до 5 раз

str.search(/н{5,}/); //174; символ «н», который повторяется от 5 раз или более

/js{3}/.test("jsjsjs"); //false; на самом деле будет искаться вхождение подстроки "jsss"

     //позиции соответствия

/^\d\d?-\d\d?-\d{4}$/ //спецсимвол «^» в начале и спецсимвол «$» в конце, говорят что строка должна строго начинаться и заканчиваться в соответствии с шаблоном регулярного выражения

/\bJava\b/.test("Java Script"); //true

/\BScript\b/.test("JavaScript")); //true

     //Флаги

"JavaScript".search(/s/i); //4; ищется как «s», так и «S»

"JavaScript\nis\nthe\nprogramming\nlanguage\nof\nthe\nWeb".search(/^language/m); //30;

     //Группировка и ссылки

//Внутренние ссылки (ссылка в шаблоне регулярного выражения)

'JavaScript programs are written using the "Unicode\' character set'.search(/["'][^"']*["']/); //42

'JavaScript programs are written using the "Unicode\' character set'.search(/(["'])[^"']*\1/); //-1

'JavaScript programs are written using the "Unicode\" character set'.search(/(["'])[^"']*\1/); //42

//Внешние ссылки (ссылка вне шаблона регулярного выражения)

'Script Java'.replace(/(\w+) (\w+$)/, '$2$1'); //"JavaScript"

var names = "Lennon, John\nMcCartney, Paul\nHarrison, George\nStar, Ringo";

names.replace(/([\w ]+), ([\w ]+)/g, '$2 $1'); //"John Lennon\nPaul McCartney\nGeorge Harrison\nRingo Star"

//возврат совпадений с шаблоном регулярного выражения

/(ABC)(DE)(F)/.exec('ABCDEF'); //массив вида "ABCDEF, ABC, DE, F"

</script>

Знайте, эфективность при изучении регулярных выражений заключается не в количестве рассмотренных примеров написанных кем-то, а в самостоятельной работе.

Успехов.


No comments:

Post a Comment

А что вы думаете по этому поводу?