SlideShare una empresa de Scribd logo
1 de 95
Descargar para leer sin conexión
Школа	
  Разработки	
  Интерфейсов	
  Яндекса	
  
Симферополь,	
  2013	
  
Руководитель	
  группы	
  разработки	
  интерфейсов	
  
Рекламной	
  Сети	
  Яндекса	
  
Макс	
  Ширшин	
  
Регулярные	
  выражения	
  
Вместо	
  предисловия	
  
2	
  
Виды	
  регулярных	
  выражений	
  
•  POSIX	
  (BRE,	
  ERE)	
  
•  PCRE	
  =	
  Perl-­‐CompaYble	
  Regular	
  Expressions	
  
3	
  
Цитата	
  из	
  стандарта	
  языка	
  JavaScript:	
  
«Вид	
  и	
  функциональность	
  регулярных	
  
выражений	
  в	
  JavaScript	
  реализованы	
  
по	
  подобию	
  подсистемы	
  регулярных	
  
выражений	
  в	
  языке	
  программирования	
  Perl	
  5»	
  
4	
  
JS-­‐синтаксис	
  (очень	
  кратко)	
  
var	
  re	
  =	
  /^foo/;	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
5	
  
JS-­‐синтаксис	
  (очень	
  кратко)	
  
var	
  re	
  =	
  /^foo/;	
  
	
  
//	
  boolean	
  
re.test('строка');	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
6	
  
JS-­‐синтаксис	
  (очень	
  кратко)	
  
var	
  re	
  =	
  /^foo/;	
  
	
  
//	
  boolean	
  
re.test('строка');	
  
	
  	
  	
  
//	
  null	
  или	
  Array	
  
re.exec('строка');	
  
7	
  
Из	
  чего	
  состоят	
  регэкспы	
  
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
8	
  
Из	
  чего	
  состоят	
  регэкспы	
  
1.  Символы	
  
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
9	
  
Из	
  чего	
  состоят	
  регэкспы	
  
1.  Символы	
  
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
2.  Операции	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
10	
  
Из	
  чего	
  состоят	
  регэкспы	
  
1.  Символы	
  
—  обычные	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
2.  Операции	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
11	
  
Из	
  чего	
  состоят	
  регэкспы	
  
1.  Символы	
  
—  обычные	
  
—  специальные	
  (метасимволы)	
  
2.  Операции	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
12	
  
Из	
  чего	
  состоят	
  регэкспы	
  
1.  Символы	
  
—  обычные	
  
—  специальные	
  (метасимволы)	
  
2.  Операции	
  
—  квантификация	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
13	
  
Из	
  чего	
  состоят	
  регэкспы	
  
1.  Символы	
  
—  обычные	
  
—  специальные	
  (метасимволы)	
  
2.  Операции	
  
—  квантификация	
  
—  перечисление	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
14	
  
Из	
  чего	
  состоят	
  регэкспы	
  
1.  Символы	
  
—  обычные	
  
—  специальные	
  (метасимволы)	
  
2.  Операции	
  
—  квантификация	
  
—  перечисление	
  
—  группировка	
  
Метасимволы	
  
8	
  
/./.test('foo');	
  	
  //	
  true	
  
	
  
/./.test('rn')	
  	
  //	
  false	
  
	
  
	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
	
  	
  	
  
	
  
16	
  
Любой	
  символ	
  
/./.test('foo');	
  	
  //	
  true	
  
	
  
/./.test('rn')	
  	
  //	
  false	
  
	
  
	
  
	
  
Что	
  вы	
  хотели	
  на	
  самом	
  деле:	
  
/[sS]/	
  для	
  JS	
  
	
  	
  или	
  
/./s	
  (не	
  работает	
  в	
  JS)	
  
	
  	
  	
  
	
  	
  	
  
	
  
17	
  
Любой	
  символ	
  
>>>	
  /^something$/.test('something')	
  
true	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  
	
  
18	
  
Границы	
  строк	
  
>>>	
  /^something$/.test('something')	
  
true	
  
	
  
>>>	
  /^something$/.test('somethingnbad')	
  
false	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  
	
  
19	
  
Границы	
  строк	
  
>>>	
  /^something$/.test('something')	
  
true	
  
	
  
>>>	
  /^something$/.test('somethingnbad')	
  
false	
  
	
  
>>>	
  /^something$/m.test('somethingnbad')	
  
true	
  	
  	
  
	
  
20	
  
Границы	
  строк	
  
>>>	
  /ba/.test('alabama)	
  
true	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
21	
  
Граница	
  слова	
  
>>>	
  /ba/.test('alabama)	
  
true	
  
>>>	
  /ab/.test('alabama')	
  
true	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
22	
  
Граница	
  слова	
  
>>>	
  /ba/.test('alabama)	
  
true	
  
>>>	
  /ab/.test('alabama')	
  
true	
  
	
  
>>>	
  /ab/.test('naïve')	
  
true	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
23	
  
Граница	
  слова	
  
>>>	
  /ba/.test('alabama)	
  
true	
  
>>>	
  /ab/.test('alabama')	
  
true	
  
	
  
>>>	
  /ab/.test('naïve')	
  
true	
  
	
  
не-­‐граница	
  слова	
  
/Ba/.test('alabama');	
  
24	
  
Граница	
  слова	
  
Символьные	
  классы	
  
12	
  
/s/	
  (инвертированный	
  вариант	
  /S/)	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
26	
  
Пробельные	
  символы	
  
/s/	
  (инвертированный	
  вариант	
  /S/)	
  
	
  
FF:	
  
t	
  	
  	
  	
  	
  n	
  	
  	
  	
  	
  v	
  	
  	
  	
  	
  f	
  	
  	
  	
  	
  r	
  	
  	
  	
  	
  u0020	
  u00a0	
  
u1680	
  u180e	
  u2000	
  u2001	
  u2002	
  u2003	
  u2004	
  
u2005	
  u2006	
  u2007	
  u2008	
  u2009	
  u200a	
  u2028	
  
u2029	
  u202f	
  u205f	
  u3000	
  
	
  
Chrome	
  19,	
  IE	
  9:	
  
как	
  в	
  FF	
  12	
  и	
  ещё	
  ufeff	
  
	
  
IE	
  7,	
  8	
  :-­‐(	
  
только:	
  
t	
  n	
  v	
  f	
  r	
  u0020	
  
	
  
27	
  
Пробельные	
  символы	
  
/d/	
  ~	
  цифры	
  от	
  0	
  до	
  9	
  
	
  
/w/	
  ~	
  буквы,	
  цифры	
  и	
  подчёркивание	
  
В	
  JS	
  не	
  работает	
  для	
  русских	
  букв!	
  
	
  
И	
  наоборот:	
  
/D/	
  ~	
  всё,	
  кроме	
  цифр	
  
/W/	
  ~	
  всё,	
  кроме	
  букв	
  и	
  цифр	
  
28	
  
Буквы	
  и	
  цифры	
  
Пример:	
  
/[abc123]/	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
29	
  
Произвольные	
  классы	
  символов	
  
Пример:	
  
/[abc123]/	
  
	
  	
  	
  
Работают	
  метасимволы	
  и	
  диапазоны:	
  
/[A-­‐Fd]/	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
30	
  
Произвольные	
  классы	
  символов	
  
Пример:	
  
/[abc123]/	
  
	
  	
  	
  
Работают	
  метасимволы	
  и	
  диапазоны:	
  
/[A-­‐Fd]/	
  
	
  	
  	
  
Можно	
  указать	
  несколько	
  диапазонов:	
  
/[a-­‐cG-­‐M0-­‐7]/	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
31	
  
Произвольные	
  классы	
  символов	
  
Пример:	
  
/[abc123]/	
  
	
  	
  	
  
Работают	
  метасимволы	
  и	
  диапазоны:	
  
/[A-­‐Fd]/	
  
	
  	
  	
  
Можно	
  указать	
  несколько	
  диапазонов:	
  
/[a-­‐cG-­‐M0-­‐7]/	
  
	
  	
  	
  
ВАЖНО:	
  диапазоны	
  берутся	
  из	
  Юникода.	
  
При	
  работе	
  с	
  кириллическими	
  диапазонами	
  
проверьте	
  порядок	
  символов	
  в	
  Юникоде!	
  
32	
  
Произвольные	
  классы	
  символов	
  
символ	
  «точка»	
  —	
  просто	
  точка!	
  
/[.]/.test('anything')	
  //	
  false	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
33	
  
Произвольные	
  классы	
  символов	
  
символ	
  «точка»	
  —	
  просто	
  точка!	
  
/[.]/.test('anything')	
  //	
  false	
  
	
  
символы:	
  	
  ]	
  -­‐	
  
/[]-­‐]/	
  
	
  
34	
  
Произвольные	
  классы	
  символов	
  
всё,	
  кроме	
  a,	
  b,	
  c:	
  
/[^abc]/	
  
	
  	
  	
  
^	
  как	
  символ:	
  
/[abc^]/	
  
35	
  
Инвертированные	
  
символьные	
  классы	
  
Квантификаторы	
  
18	
  
/bo*/.test('b')	
  //	
  true	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
	
  	
  	
  
37	
  
Ноль	
  или	
  более,	
  один	
  или	
  
более	
  
/bo*/.test('b')	
  //	
  true	
  
	
  
/.*/.test('')	
  	
  	
  //	
  true	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
	
  	
  	
  
38	
  
Ноль	
  или	
  более,	
  один	
  или	
  
более	
  
/bo*/.test('b')	
  //	
  true	
  
	
  
/.*/.test('')	
  	
  	
  //	
  true	
  
	
  	
  	
  
/bo+/.test('b')	
  //	
  false	
  
	
  	
  	
  
	
  	
  	
  
39	
  
Ноль	
  или	
  более,	
  один	
  или	
  
более	
  
/colou?r/.test('color');	
  
/colou?r/.test('colour');	
  
	
  
40	
  
Ноль	
  или	
  один	
  
41	
  
Диапазоны	
  повторов	
  
/bo{7}/	
  	
  	
  	
  точно	
  7	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
42	
  
Диапазоны	
  повторов	
  
/bo{7}/	
  	
  	
  	
  точно	
  7	
  
	
  
/bo{2,5}/	
  	
  от	
  2	
  до	
  5,	
  x	
  <	
  y	
  
	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
43	
  
Диапазоны	
  повторов	
  
/bo{7}/	
  	
  	
  	
  точно	
  7	
  
	
  
/bo{2,5}/	
  	
  от	
  2	
  до	
  5,	
  x	
  <	
  y	
  
	
  	
  	
  	
  	
  
/bo{5,}/	
  	
  	
  5	
  или	
  более	
  
	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
44	
  
Диапазоны	
  повторов	
  
/bo{7}/	
  	
  	
  	
  точно	
  7	
  
	
  
/bo{2,5}/	
  	
  от	
  2	
  до	
  5,	
  x	
  <	
  y	
  
	
  	
  	
  	
  	
  
/bo{5,}/	
  	
  	
  5	
  или	
  более	
  
	
  	
  	
  	
  	
  
в	
  JS	
  не	
  работает!	
  
/b{,5}/.test('bbbbb')	
  
var	
  r	
  =	
  /a+/.exec('aaaaa');	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
	
  	
  	
  
45	
  
Жадные	
  (greedy)	
  
квантификаторы	
  
var	
  r	
  =	
  /a+/.exec('aaaaa');	
  
	
  	
  	
  
>>>	
  r[0]	
  
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
	
  	
  	
  
46	
  
Жадные	
  (greedy)	
  
квантификаторы	
  
var	
  r	
  =	
  /a+/.exec('aaaaa');	
  
	
  	
  	
  
>>>	
  r[0]	
  
"aaaaa"	
  
	
  	
  	
  
	
  	
  	
  
47	
  
Жадные	
  (greedy)	
  
квантификаторы	
  
var	
  r	
  =	
  /a+?/.exec('aaaaa');	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  
48	
  
Ленивые	
  (lazy)	
  квантификаторы	
  
var	
  r	
  =	
  /a+?/.exec('aaaaa');	
  
>>>	
  r[0]	
  
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  
49	
  
Ленивые	
  (lazy)	
  квантификаторы	
  
var	
  r	
  =	
  /a+?/.exec('aaaaa');	
  
>>>	
  r[0]	
  
"a"	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  
50	
  
Ленивые	
  (lazy)	
  квантификаторы	
  
var	
  r	
  =	
  /a+?/.exec('aaaaa');	
  
>>>	
  r[0]	
  
"a"	
  
	
  	
  	
  
r	
  =	
  /a*?/.exec('aaaaa');	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  
51	
  
Ленивые	
  (lazy)	
  квантификаторы	
  
var	
  r	
  =	
  /a+?/.exec('aaaaa');	
  
>>>	
  r[0]	
  
"a"	
  
	
  	
  	
  
r	
  =	
  /a*?/.exec('aaaaa');	
  
>>>	
  r[0]	
  
  	
  	
  	
  
52	
  
Ленивые	
  (lazy)	
  квантификаторы	
  
var	
  r	
  =	
  /a+?/.exec('aaaaa');	
  
>>>	
  r[0]	
  
"a"	
  
	
  	
  	
  
r	
  =	
  /a*?/.exec('aaaaa');	
  
>>>	
  r[0]	
  
""	
  
53	
  
Ленивые	
  (lazy)	
  квантификаторы	
  
Группировки	
  
24	
  
с	
  захватом	
  
/(boo)/.test("boo");	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
55	
  
Группировки	
  
с	
  захватом	
  
/(boo)/.test("boo");	
  
	
  
без	
  захвата	
  
/(?:boo)/.test("boo");	
  
	
  
56	
  
Группировки	
  
var	
  result	
  =	
  /(bo)o+(b)/.exec('the	
  booooob');	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
57	
  
Группировки	
  и	
  конструктор	
  RegExp
var	
  result	
  =	
  /(bo)o+(b)/.exec('the	
  booooob');	
  
>>>	
  RegExp.$1	
  
"bo"	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
58	
  
Группировки	
  и	
  конструктор	
  RegExp
var	
  result	
  =	
  /(bo)o+(b)/.exec('the	
  booooob');	
  
>>>	
  RegExp.$1	
  
"bo"	
  
>>>	
  RegExp.$2	
  
"b"	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
59	
  
Группировки	
  и	
  конструктор	
  RegExp
var	
  result	
  =	
  /(bo)o+(b)/.exec('the	
  booooob');	
  
>>>	
  RegExp.$1	
  
"bo"	
  
>>>	
  RegExp.$2	
  
"b"	
  
>>>	
  RegExp.$9	
  
""	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
60	
  
Группировки	
  и	
  конструктор	
  RegExp
var	
  result	
  =	
  /(bo)o+(b)/.exec('the	
  booooob');	
  
>>>	
  RegExp.$1	
  
"bo"	
  
>>>	
  RegExp.$2	
  
"b"	
  
>>>	
  RegExp.$9	
  
""	
  
>>>	
  RegExp.$10	
  
undefined	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
61	
  
Группировки	
  и	
  конструктор	
  RegExp
var	
  result	
  =	
  /(bo)o+(b)/.exec('the	
  booooob');	
  
>>>	
  RegExp.$1	
  
"bo"	
  
>>>	
  RegExp.$2	
  
"b"	
  
>>>	
  RegExp.$9	
  
""	
  
>>>	
  RegExp.$10	
  
undefined	
  
>>>	
  RegExp.$0	
  
undefined	
  
62	
  
Группировки	
  и	
  конструктор	
  RegExp
 	
  /((foo)	
  (b(a)r))/	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  
63	
  
Порядок	
  нумерации	
  группировок
 	
  /((foo)	
  (b(a)r))/	
  
	
  
$1	
  (	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  	
  	
  foo	
  bar	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  
64	
  
Порядок	
  нумерации	
  группировок
 	
  /((foo)	
  (b(a)r))/	
  
	
  
$1	
  (	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  	
  	
  foo	
  bar	
  	
  
$2	
  	
  (	
  	
  	
  )	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  foo	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  
65	
  
Порядок	
  нумерации	
  группировок
 	
  /((foo)	
  (b(a)r))/	
  
	
  
$1	
  (	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  	
  	
  foo	
  bar	
  	
  
$2	
  	
  (	
  	
  	
  )	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  foo	
  
$3	
  	
  	
  	
  	
  	
  	
  	
  (	
  	
  	
  	
  	
  )	
  	
  	
  	
  bar	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  
66	
  
Порядок	
  нумерации	
  группировок
 	
  /((foo)	
  (b(a)r))/	
  
	
  
$1	
  (	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  )	
  	
  	
  foo	
  bar	
  	
  
$2	
  	
  (	
  	
  	
  )	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  foo	
  
$3	
  	
  	
  	
  	
  	
  	
  	
  (	
  	
  	
  	
  	
  )	
  	
  	
  	
  bar	
  
$4	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (	
  )	
  	
  	
  	
  	
  	
  a	
  
	
  	
  
67	
  
Порядок	
  нумерации	
  группировок
var	
  r	
  =	
  /best(?=	
  match)/.exec('best	
  match');	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  
68	
  
Lookahead	
  
var	
  r	
  =	
  /best(?=	
  match)/.exec('best	
  match');	
  
	
  
>>>	
  !!r	
  
true	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  
69	
  
Lookahead	
  
var	
  r	
  =	
  /best(?=	
  match)/.exec('best	
  match');	
  
	
  
>>>	
  !!r	
  
true	
  
	
  
>>>	
  r[0]	
  
"best"	
  
	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  
70	
  
Lookahead	
  
var	
  r	
  =	
  /best(?=	
  match)/.exec('best	
  match');	
  
	
  
>>>	
  !!r	
  
true	
  
	
  
>>>	
  r[0]	
  
"best"	
  
	
  	
  	
  
>>>	
  /best(?!	
  match)/.test('best	
  match')	
  
false	
  
71	
  
Lookahead	
  
Перечисление	
  
30	
  
/red|green|blue	
  light/	
  
/(red|green|blue)	
  light/	
  
	
  	
  	
  
>>>	
  /var	
  a(;|$)/.test('var	
  a')	
  
true	
  
73	
  
Логическое	
  «или»	
  
true	
  
/(red|green)	
  apple	
  is	
  1/.test('red	
  apple	
  is	
  red')	
  
	
  
true	
  
/(red|green)	
  apple	
  is	
  1/.test('green	
  apple	
  is	
  green')	
  
74	
  
Backreferences	
  
(обратные	
  ссылки)	
  
Представление	
  символов	
  
32	
  
x09	
  ===	
  t	
  (не	
  Unicode,	
  для	
  ASCII/ANSI)	
  
u20AC	
  ===	
  €	
  (для	
  Unicode)	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
76	
  
Представление	
  символов	
  
x09	
  ===	
  t	
  (не	
  Unicode,	
  для	
  ASCII/ANSI)	
  
u20AC	
  ===	
  €	
  (для	
  Unicode)	
  
	
  
обратный	
  slash	
  убирает	
  специальное	
  
значение	
  у	
  символа	
  
/()/.test('()')	
  	
  //	
  true	
  
/n/.test('n')	
  	
  //	
  true	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
77	
  
Представление	
  символов	
  
x09	
  ===	
  t	
  (не	
  Unicode,	
  для	
  ASCII/ANSI)	
  
u20AC	
  ===	
  €	
  (для	
  Unicode)	
  
	
  
обратный	
  slash	
  убирает	
  специальное	
  
значение	
  у	
  символа	
  
/()/.test('()')	
  	
  //	
  true	
  
/n/.test('n')	
  	
  //	
  true	
  
	
  
иногда	
  верно	
  и	
  обратное	
  
/f/.test('f')	
  	
  //	
  false!	
  
78	
  
Представление	
  символов	
  
Флаги	
  
34	
  
g	
  i	
  m	
  s	
  x	
  
	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
80	
  
Флаги	
  в	
  регулярных	
  выражениях	
  
g	
  i	
  m	
  s	
  x	
  
	
  	
  	
  	
  	
  
global	
  match	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
81	
  
Флаги	
  в	
  регулярных	
  выражениях	
  
g	
  i	
  m	
  s	
  x	
  
	
  	
  	
  	
  	
  
global	
  match	
  
ignore	
  case	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
82	
  
Флаги	
  в	
  регулярных	
  выражениях	
  
g	
  i	
  m	
  s	
  x	
  
	
  	
  	
  	
  	
  
global	
  match	
  
ignore	
  case	
  
multiline	
  matching	
  for	
  ^	
  and	
  $	
  
	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
83	
  
Флаги	
  в	
  регулярных	
  выражениях	
  
g	
  i	
  m	
  s	
  x	
  
	
  	
  	
  	
  	
  
global	
  match	
  
ignore	
  case	
  
multiline	
  matching	
  for	
  ^	
  and	
  $	
  
	
  
нет	
  поддержки	
  в	
  JS	
  для:	
  
string	
  as	
  single	
  line	
  
extend	
  pattern	
  
84	
  
Флаги	
  в	
  регулярных	
  выражениях	
  
/(?i)foo/	
  
/(?i-­‐m)bar$/	
  
/(?i-­‐sm).x$/	
  
/(?i)foo(?-­‐i)bar/	
  
	
  	
  	
  	
  	
  
Не	
  все	
  реализации	
  поддерживают	
  
переключение	
  флагов	
  внутри	
  regexp.	
  	
  
	
  
JS	
  при	
  таком	
  синтаксисе	
  включает	
  флаги	
  на	
  
весь	
  regexp	
  сразу	
  и	
  не	
  даёт	
  менять.	
  
85	
  
Альтернативный	
  синтаксис	
  
для	
  флагов	
  
RegExp	
  в	
  JavaScript	
  
86	
  
экземпляры	
  RegExp:	
  
	
  	
  /regexp/.exec('строка')	
  
	
  	
  	
  	
  	
  	
  null	
  или	
  массив	
  ['всё	
  совпадение',	
  $1,	
  $2,	
  ...]	
  
	
  	
  /regexp/.test('строка')	
  
	
  	
  	
  	
  	
  	
  false	
  или	
  true	
  
	
  	
  	
  	
  	
  
экземпляры	
  String:	
  
	
  	
  'str'.match(/regexp/)	
  
	
  	
  'str'.match('w{1,3}')	
  
	
  	
  	
  	
  	
  	
  -­‐	
  эквивалент	
  /regexp/.exec,	
  если	
  нет	
  флага	
  g;	
  
	
  	
  	
  	
  	
  	
  -­‐	
  массив	
  всех	
  совпадений	
  по	
  строке,	
  если	
  есть	
  флаг	
  g	
  
(внутренние	
  группировки	
  игнорируются)	
  
	
  	
  	
  	
  	
  
	
  	
  'str'.search(/regexp/)	
  
	
  	
  'str'.search('w{1,3}')	
  
	
  	
  	
  	
  	
  	
  позиция	
  первого	
  совпадения	
  или	
  -­‐1	
  
87	
  
Методы	
  
экземпляры	
  String:	
  
'str'.replace(/old/,	
  'new');	
  
	
  	
  	
  	
  	
  
В	
  строке	
  замены	
  поддерживаются	
  следующие	
  спецсимволы:	
  
	
  	
  	
  	
  $$	
  	
  	
  вставляет	
  значок	
  доллара	
  "$"	
  
	
  	
  	
  	
  $&	
  	
  	
  подстрока,	
  совпавшая	
  с	
  регэкспом	
  
	
  	
  	
  	
  $`	
  	
  	
  подстрока	
  до	
  $&	
  
	
  	
  	
  	
  $'	
  	
  	
  подстрока	
  после	
  $&	
  
	
  
	
  	
  	
  	
  $1,	
  $2,	
  $3	
  и	
  т.д.:	
  cтрока,	
  совпавшая	
  с	
  соответствующей	
  
скобочной	
  группировкой	
  
	
  	
  	
  	
  	
  
'str'.replace(/(r)(e)gexp/g,	
  
	
  	
  	
  	
  function(matched,	
  $1,	
  $2,	
  offset,	
  sourceString)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  //	
  чем	
  заменить	
  matched	
  на	
  этом	
  шаге?	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  'замена';	
  
});	
  
88	
  
Методы	
  
//	
  ПЛОХО	
  
var	
  re	
  =	
  new	
  RegExp('^'	
  +	
  userInput	
  +	
  '$');	
  
var	
  userInput	
  =	
  '[abc]';	
  
	
  
	
  
	
  
//	
  ХОРОШО	
  
RegExp.escape	
  =	
  function(text)	
  {	
  
	
  	
  return	
  text.replace(/[-­‐[]{}()*+?.,^$|#s]/g,	
  "$&");	
  
};	
  
	
  	
  	
  	
  	
  
var	
  re	
  =	
  new	
  RegExp('^'	
  +	
  RegExp.escape(userInput)	
  +	
  '$');	
  
89	
  
RegExp	
  injecYon	
  
Что	
  почитать	
  
90	
  
91	
  
В	
  интернете:	
  
javascript.ru/basic/regular-­‐expression	
  
Mastering	
  Regular	
  Expressions	
  
O'Reilly	
  Media	
  
Книга:	
  
Что	
  поделать	
  
92	
  
93	
  
Кроссворд	
  из	
  регулярных	
  выражений	
  
	
  
	
  
clck.ru/8pyrR	
  
clck.ru/8pyrm	
  
Вопросы?	
  
94	
  
Руководитель	
  группы	
  
разработки	
  интерфейсов	
  
Рекламной	
  Сети	
  Яндекса	
  
ingdir@yandex-­‐team.ru	
  
@ingdir	
  
Макс	
  Ширшин	
  

Más contenido relacionado

Destacado

наглядная характеристика проекта
наглядная характеристика проектанаглядная характеристика проекта
наглядная характеристика проекта
kulibin
 
7th annual clinical trials summit 2016
7th annual clinical trials summit 20167th annual clinical trials summit 2016
7th annual clinical trials summit 2016
Deepak Raj (2,000+Connections)
 

Destacado (9)

Politie verklaart oorlog aan dronken bestuurders
Politie verklaart oorlog aan dronken bestuurdersPolitie verklaart oorlog aan dronken bestuurders
Politie verklaart oorlog aan dronken bestuurders
 
Fierce Case Study: Symetra
Fierce Case Study: SymetraFierce Case Study: Symetra
Fierce Case Study: Symetra
 
наглядная характеристика проекта
наглядная характеристика проектанаглядная характеристика проекта
наглядная характеристика проекта
 
Application and Server Security
Application and Server SecurityApplication and Server Security
Application and Server Security
 
7th annual clinical trials summit 2016
7th annual clinical trials summit 20167th annual clinical trials summit 2016
7th annual clinical trials summit 2016
 
Restorative Action Through Strengths
Restorative Action Through StrengthsRestorative Action Through Strengths
Restorative Action Through Strengths
 
Urbanismo - Baños del inca
Urbanismo - Baños del incaUrbanismo - Baños del inca
Urbanismo - Baños del inca
 
10. 이동건 발표자료
10. 이동건 발표자료10. 이동건 발표자료
10. 이동건 발표자료
 
Avaliacao online das aprendizagens: vantagens e problemáticas
Avaliacao online das aprendizagens: vantagens e problemáticasAvaliacao online das aprendizagens: vantagens e problemáticas
Avaliacao online das aprendizagens: vantagens e problemáticas
 

Más de Yandex

Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Yandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Yandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Yandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Yandex
 

Más de Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

2013 09 21 регулярные выражения

  • 1. Школа  Разработки  Интерфейсов  Яндекса   Симферополь,  2013   Руководитель  группы  разработки  интерфейсов   Рекламной  Сети  Яндекса   Макс  Ширшин   Регулярные  выражения  
  • 3. Виды  регулярных  выражений   •  POSIX  (BRE,  ERE)   •  PCRE  =  Perl-­‐CompaYble  Regular  Expressions   3   Цитата  из  стандарта  языка  JavaScript:   «Вид  и  функциональность  регулярных   выражений  в  JavaScript  реализованы   по  подобию  подсистемы  регулярных   выражений  в  языке  программирования  Perl  5»  
  • 4. 4   JS-­‐синтаксис  (очень  кратко)   var  re  =  /^foo/;                                                                                                                                                        
  • 5. 5   JS-­‐синтаксис  (очень  кратко)   var  re  =  /^foo/;     //  boolean   re.test('строка');                                                                                      
  • 6. 6   JS-­‐синтаксис  (очень  кратко)   var  re  =  /^foo/;     //  boolean   re.test('строка');         //  null  или  Array   re.exec('строка');  
  • 7. 7   Из  чего  состоят  регэкспы                                                                                                                                                                                                    
  • 8. 8   Из  чего  состоят  регэкспы   1.  Символы                                                                                                                                                                                  
  • 9. 9   Из  чего  состоят  регэкспы   1.  Символы                                                                           2.  Операции                                                                                      
  • 10. 10   Из  чего  состоят  регэкспы   1.  Символы   —  обычные                                                         2.  Операции                                                                                      
  • 11. 11   Из  чего  состоят  регэкспы   1.  Символы   —  обычные   —  специальные  (метасимволы)   2.  Операции                                                                                      
  • 12. 12   Из  чего  состоят  регэкспы   1.  Символы   —  обычные   —  специальные  (метасимволы)   2.  Операции   —  квантификация                                                        
  • 13. 13   Из  чего  состоят  регэкспы   1.  Символы   —  обычные   —  специальные  (метасимволы)   2.  Операции   —  квантификация   —  перечисление                            
  • 14. 14   Из  чего  состоят  регэкспы   1.  Символы   —  обычные   —  специальные  (метасимволы)   2.  Операции   —  квантификация   —  перечисление   —  группировка  
  • 16. /./.test('foo');    //  true     /./.test('rn')    //  false                                                                                                                                                                                     16   Любой  символ  
  • 17. /./.test('foo');    //  true     /./.test('rn')    //  false         Что  вы  хотели  на  самом  деле:   /[sS]/  для  JS      или   /./s  (не  работает  в  JS)                 17   Любой  символ  
  • 18. >>>  /^something$/.test('something')   true                                                                                                                                                                                                                 18   Границы  строк  
  • 19. >>>  /^something$/.test('something')   true     >>>  /^something$/.test('somethingnbad')   false                                                                                                             19   Границы  строк  
  • 20. >>>  /^something$/.test('something')   true     >>>  /^something$/.test('somethingnbad')   false     >>>  /^something$/m.test('somethingnbad')   true         20   Границы  строк  
  • 21. >>>  /ba/.test('alabama)   true                                                                                                                                                                                                                           21   Граница  слова  
  • 22. >>>  /ba/.test('alabama)   true   >>>  /ab/.test('alabama')   true                                                                                                                                                         22   Граница  слова  
  • 23. >>>  /ba/.test('alabama)   true   >>>  /ab/.test('alabama')   true     >>>  /ab/.test('naïve')   true                                                                                         23   Граница  слова  
  • 24. >>>  /ba/.test('alabama)   true   >>>  /ab/.test('alabama')   true     >>>  /ab/.test('naïve')   true     не-­‐граница  слова   /Ba/.test('alabama');   24   Граница  слова  
  • 26. /s/  (инвертированный  вариант  /S/)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   26   Пробельные  символы  
  • 27. /s/  (инвертированный  вариант  /S/)     FF:   t          n          v          f          r          u0020  u00a0   u1680  u180e  u2000  u2001  u2002  u2003  u2004   u2005  u2006  u2007  u2008  u2009  u200a  u2028   u2029  u202f  u205f  u3000     Chrome  19,  IE  9:   как  в  FF  12  и  ещё  ufeff     IE  7,  8  :-­‐(   только:   t  n  v  f  r  u0020     27   Пробельные  символы  
  • 28. /d/  ~  цифры  от  0  до  9     /w/  ~  буквы,  цифры  и  подчёркивание   В  JS  не  работает  для  русских  букв!     И  наоборот:   /D/  ~  всё,  кроме  цифр   /W/  ~  всё,  кроме  букв  и  цифр   28   Буквы  и  цифры  
  • 29. Пример:   /[abc123]/                                                                                                                                                                                                                                                                                                                                                                                                                                                                   29   Произвольные  классы  символов  
  • 30. Пример:   /[abc123]/         Работают  метасимволы  и  диапазоны:   /[A-­‐Fd]/                                                                                                                                                                                                                                                                                                                                                                 30   Произвольные  классы  символов  
  • 31. Пример:   /[abc123]/         Работают  метасимволы  и  диапазоны:   /[A-­‐Fd]/         Можно  указать  несколько  диапазонов:   /[a-­‐cG-­‐M0-­‐7]/                                                                                                                                                                                                                                                   31   Произвольные  классы  символов  
  • 32. Пример:   /[abc123]/         Работают  метасимволы  и  диапазоны:   /[A-­‐Fd]/         Можно  указать  несколько  диапазонов:   /[a-­‐cG-­‐M0-­‐7]/         ВАЖНО:  диапазоны  берутся  из  Юникода.   При  работе  с  кириллическими  диапазонами   проверьте  порядок  символов  в  Юникоде!   32   Произвольные  классы  символов  
  • 33. символ  «точка»  —  просто  точка!   /[.]/.test('anything')  //  false                                                             33   Произвольные  классы  символов  
  • 34. символ  «точка»  —  просто  точка!   /[.]/.test('anything')  //  false     символы:    ]  -­‐   /[]-­‐]/     34   Произвольные  классы  символов  
  • 35. всё,  кроме  a,  b,  c:   /[^abc]/         ^  как  символ:   /[abc^]/   35   Инвертированные   символьные  классы  
  • 37. /bo*/.test('b')  //  true                                                                                                                             37   Ноль  или  более,  один  или   более  
  • 38. /bo*/.test('b')  //  true     /.*/.test('')      //  true                                                                         38   Ноль  или  более,  один  или   более  
  • 39. /bo*/.test('b')  //  true     /.*/.test('')      //  true         /bo+/.test('b')  //  false               39   Ноль  или  более,  один  или   более  
  • 40. /colou?r/.test('color');   /colou?r/.test('colour');     40   Ноль  или  один  
  • 41. 41   Диапазоны  повторов   /bo{7}/        точно  7                                                                                                                                                                                                                      
  • 42. 42   Диапазоны  повторов   /bo{7}/        точно  7     /bo{2,5}/    от  2  до  5,  x  <  y                                                                                                                                                          
  • 43. 43   Диапазоны  повторов   /bo{7}/        точно  7     /bo{2,5}/    от  2  до  5,  x  <  y             /bo{5,}/      5  или  более                                                                                                
  • 44. 44   Диапазоны  повторов   /bo{7}/        точно  7     /bo{2,5}/    от  2  до  5,  x  <  y             /bo{5,}/      5  или  более             в  JS  не  работает!   /b{,5}/.test('bbbbb')  
  • 45. var  r  =  /a+/.exec('aaaaa');                                                           45   Жадные  (greedy)   квантификаторы  
  • 46. var  r  =  /a+/.exec('aaaaa');         >>>  r[0]                                 46   Жадные  (greedy)   квантификаторы  
  • 47. var  r  =  /a+/.exec('aaaaa');         >>>  r[0]   "aaaaa"               47   Жадные  (greedy)   квантификаторы  
  • 48. var  r  =  /a+?/.exec('aaaaa');                                                                                                                       48   Ленивые  (lazy)  квантификаторы  
  • 49. var  r  =  /a+?/.exec('aaaaa');   >>>  r[0]                                                                                                   49   Ленивые  (lazy)  квантификаторы  
  • 50. var  r  =  /a+?/.exec('aaaaa');   >>>  r[0]   "a"                                                                                         50   Ленивые  (lazy)  квантификаторы  
  • 51. var  r  =  /a+?/.exec('aaaaa');   >>>  r[0]   "a"         r  =  /a*?/.exec('aaaaa');                               51   Ленивые  (lazy)  квантификаторы  
  • 52. var  r  =  /a+?/.exec('aaaaa');   >>>  r[0]   "a"         r  =  /a*?/.exec('aaaaa');   >>>  r[0]           52   Ленивые  (lazy)  квантификаторы  
  • 53. var  r  =  /a+?/.exec('aaaaa');   >>>  r[0]   "a"         r  =  /a*?/.exec('aaaaa');   >>>  r[0]   ""   53   Ленивые  (lazy)  квантификаторы  
  • 55. с  захватом   /(boo)/.test("boo");                                                                                 55   Группировки  
  • 56. с  захватом   /(boo)/.test("boo");     без  захвата   /(?:boo)/.test("boo");     56   Группировки  
  • 57. var  result  =  /(bo)o+(b)/.exec('the  booooob');                                                                                                                                                                                                                                   57   Группировки  и  конструктор  RegExp
  • 58. var  result  =  /(bo)o+(b)/.exec('the  booooob');   >>>  RegExp.$1   "bo"                                                                                                                                                                                         58   Группировки  и  конструктор  RegExp
  • 59. var  result  =  /(bo)o+(b)/.exec('the  booooob');   >>>  RegExp.$1   "bo"   >>>  RegExp.$2   "b"                                                                                                                                                 59   Группировки  и  конструктор  RegExp
  • 60. var  result  =  /(bo)o+(b)/.exec('the  booooob');   >>>  RegExp.$1   "bo"   >>>  RegExp.$2   "b"   >>>  RegExp.$9   ""                                                                                                             60   Группировки  и  конструктор  RegExp
  • 61. var  result  =  /(bo)o+(b)/.exec('the  booooob');   >>>  RegExp.$1   "bo"   >>>  RegExp.$2   "b"   >>>  RegExp.$9   ""   >>>  RegExp.$10   undefined                                                       61   Группировки  и  конструктор  RegExp
  • 62. var  result  =  /(bo)o+(b)/.exec('the  booooob');   >>>  RegExp.$1   "bo"   >>>  RegExp.$2   "b"   >>>  RegExp.$9   ""   >>>  RegExp.$10   undefined   >>>  RegExp.$0   undefined   62   Группировки  и  конструктор  RegExp
  • 63.    /((foo)  (b(a)r))/                                                                                                                                                                                                                               63   Порядок  нумерации  группировок
  • 64.    /((foo)  (b(a)r))/     $1  (                          )      foo  bar                                                                                                                                                                 64   Порядок  нумерации  группировок
  • 65.    /((foo)  (b(a)r))/     $1  (                          )      foo  bar     $2    (      )                        foo                                                                                                           65   Порядок  нумерации  группировок
  • 66.    /((foo)  (b(a)r))/     $1  (                          )      foo  bar     $2    (      )                        foo   $3                (          )        bar                                                       66   Порядок  нумерации  группировок
  • 67.    /((foo)  (b(a)r))/     $1  (                          )      foo  bar     $2    (      )                        foo   $3                (          )        bar   $4                    (  )            a       67   Порядок  нумерации  группировок
  • 68. var  r  =  /best(?=  match)/.exec('best  match');                                                                                                                                                                               68   Lookahead  
  • 69. var  r  =  /best(?=  match)/.exec('best  match');     >>>  !!r   true                                                                                                                                               69   Lookahead  
  • 70. var  r  =  /best(?=  match)/.exec('best  match');     >>>  !!r   true     >>>  r[0]   "best"                                                                                                         70   Lookahead  
  • 71. var  r  =  /best(?=  match)/.exec('best  match');     >>>  !!r   true     >>>  r[0]   "best"         >>>  /best(?!  match)/.test('best  match')   false   71   Lookahead  
  • 73. /red|green|blue  light/   /(red|green|blue)  light/         >>>  /var  a(;|$)/.test('var  a')   true   73   Логическое  «или»  
  • 74. true   /(red|green)  apple  is  1/.test('red  apple  is  red')     true   /(red|green)  apple  is  1/.test('green  apple  is  green')   74   Backreferences   (обратные  ссылки)  
  • 76. x09  ===  t  (не  Unicode,  для  ASCII/ANSI)   u20AC  ===  €  (для  Unicode)                                                                                                                                                                                                                                                                                                                                               76   Представление  символов  
  • 77. x09  ===  t  (не  Unicode,  для  ASCII/ANSI)   u20AC  ===  €  (для  Unicode)     обратный  slash  убирает  специальное   значение  у  символа   /()/.test('()')    //  true   /n/.test('n')    //  true                                                                                                             77   Представление  символов  
  • 78. x09  ===  t  (не  Unicode,  для  ASCII/ANSI)   u20AC  ===  €  (для  Unicode)     обратный  slash  убирает  специальное   значение  у  символа   /()/.test('()')    //  true   /n/.test('n')    //  true     иногда  верно  и  обратное   /f/.test('f')    //  false!   78   Представление  символов  
  • 80. g  i  m  s  x                                                                                                                                                                                                                                                                     80   Флаги  в  регулярных  выражениях  
  • 81. g  i  m  s  x             global  match                                                                                                                                                                                                                               81   Флаги  в  регулярных  выражениях  
  • 82. g  i  m  s  x             global  match   ignore  case                                                                                                                                                                                                     82   Флаги  в  регулярных  выражениях  
  • 83. g  i  m  s  x             global  match   ignore  case   multiline  matching  for  ^  and  $                                                                                                                                     83   Флаги  в  регулярных  выражениях  
  • 84. g  i  m  s  x             global  match   ignore  case   multiline  matching  for  ^  and  $     нет  поддержки  в  JS  для:   string  as  single  line   extend  pattern   84   Флаги  в  регулярных  выражениях  
  • 85. /(?i)foo/   /(?i-­‐m)bar$/   /(?i-­‐sm).x$/   /(?i)foo(?-­‐i)bar/             Не  все  реализации  поддерживают   переключение  флагов  внутри  regexp.       JS  при  таком  синтаксисе  включает  флаги  на   весь  regexp  сразу  и  не  даёт  менять.   85   Альтернативный  синтаксис   для  флагов  
  • 87. экземпляры  RegExp:      /regexp/.exec('строка')              null  или  массив  ['всё  совпадение',  $1,  $2,  ...]      /regexp/.test('строка')              false  или  true             экземпляры  String:      'str'.match(/regexp/)      'str'.match('w{1,3}')              -­‐  эквивалент  /regexp/.exec,  если  нет  флага  g;              -­‐  массив  всех  совпадений  по  строке,  если  есть  флаг  g   (внутренние  группировки  игнорируются)                'str'.search(/regexp/)      'str'.search('w{1,3}')              позиция  первого  совпадения  или  -­‐1   87   Методы  
  • 88. экземпляры  String:   'str'.replace(/old/,  'new');             В  строке  замены  поддерживаются  следующие  спецсимволы:          $$      вставляет  значок  доллара  "$"          $&      подстрока,  совпавшая  с  регэкспом          $`      подстрока  до  $&          $'      подстрока  после  $&            $1,  $2,  $3  и  т.д.:  cтрока,  совпавшая  с  соответствующей   скобочной  группировкой             'str'.replace(/(r)(e)gexp/g,          function(matched,  $1,  $2,  offset,  sourceString)  {                  //  чем  заменить  matched  на  этом  шаге?                  return  'замена';   });   88   Методы  
  • 89. //  ПЛОХО   var  re  =  new  RegExp('^'  +  userInput  +  '$');   var  userInput  =  '[abc]';         //  ХОРОШО   RegExp.escape  =  function(text)  {      return  text.replace(/[-­‐[]{}()*+?.,^$|#s]/g,  "$&");   };             var  re  =  new  RegExp('^'  +  RegExp.escape(userInput)  +  '$');   89   RegExp  injecYon  
  • 91. 91   В  интернете:   javascript.ru/basic/regular-­‐expression   Mastering  Regular  Expressions   O'Reilly  Media   Книга:  
  • 93. 93   Кроссворд  из  регулярных  выражений       clck.ru/8pyrR   clck.ru/8pyrm  
  • 95. Руководитель  группы   разработки  интерфейсов   Рекламной  Сети  Яндекса   ingdir@yandex-­‐team.ru   @ingdir   Макс  Ширшин