Есть такая штука как Регулярные выражения. Тот кто ими пользуется знает что это как еще один язык выучить. И их знание не абы какой плюс при приеме на работу. Но все равно диалекты регулярных выражений в контексте других языков программирования могут быть разными. Я ими пока не владею, потому что "я ведь не волшебник, я только учусь".
А пока могу рекомендовать отличные курсы по регулярным выражениям, на которых страдаю сам:
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
А что вы думаете по этому поводу?