Javascript Regular Expression
Javascript Regular Expression
Макс Ширшин
Руководитель Службы разработки интерфейсов
Рекламных Технологий
2
Виды регулярных выражений
• POSIX (BRE, ERE)
3
JS-синтаксис (очень кратко)
var re = /^foo/;
// boolean
re.test('строка');
4
Из чего состоят регэкспы
1. Символы
— обычные
— специальные (метасимволы)
2. Операции
— квантификация
— перечисление
— группировка
5
Метасимволы
6
Любой символ
/./.test('foo'); // true
/./.test('\r\n') // false
7
Границы строк
>>> /^something$/.test('something')
true
>>> /^something$/.test('something\nbad')
false
>>> /^something$/m.test('something\nbad')
true
8
Граница слова
>>> /\ba/.test('alabama)
true
>>> /a\b/.test('alabama')
true
>>> /a\b/.test('naïve')
true
не-граница слова
/\Ba/.test('alabama');
9
Символьные классы
10
Пробельные символы
/\s/ (инвертированный вариант /\S/)
FF 12:
\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
11
Буквы и цифры
/\d/ ~ цифры от 0 до 9
И наоборот:
/\D/ ~ всё, кроме цифр
/\W/ ~ всё, кроме букв и цифр
12
Произвольные классы символов
Пример:
/[abc123]/
символы: \ ] -
/[\\\]-]/
14
Инвертированные
символьные классы
всё, кроме a, b, c:
/[^abc]/
^ как символ:
/[abc^]/
15
Квантификаторы
16
Ноль или более, один или
более
/bo*/.test('b') // true
/.*/.test('') // true
/bo+/.test('b') // false
17
Ноль или один
/colou?r/.test('color');
/colou?r/.test('colour');
18
Диапазоны повторов
/bo{7}/ точно 7
/bo{2,5}/ от 2 до 5, x < y
в JS не работает!
/b{,5}/.test('bbbbb')
19
Жадные (greedy)
квантификаторы
var r = /a+/.exec('aaaaa');
>>> r[0]
"aaaaa"
20
Ленивые (lazy) квантификаторы
var r = /a+?/.exec('aaaaa');
>>> r[0]
"a"
r = /a*?/.exec('aaaaa');
>>> r[0]
""
21
Группировки
22
Группировки
с захватом
/(boo)/.test("boo");
без захвата
/(?:boo)/.test("boo");
23
Группировки и конструктор RegExp
var result = /(bo)o+(b)/.exec('the booooob');
>>> RegExp.$1
"bo"
>>> RegExp.$2
"b"
>>> RegExp.$9
""
>>> RegExp.$10
undefined
>>> RegExp.$0
undefined
24
Порядок нумерации группировок
/((foo) (b(a)r))/
$1 ( ) foo bar
$2 ( ) foo
$3 ( ) bar
$4 ( ) a
25
Backreferences
true
/(red|green) apple is \1/.test('red apple is red')
true
/(red|green) apple is \1/.test('green apple is green')
26
Lookahead
var r = /best(?= match)/.exec('best match');
>>> !!r
true
>>> r[0]
"best"
27
Перечисление
28
Логическое «или»
/red|green|blue light/
/(red|green|blue) light/
29
Представление символов
30
Представление символов
\x09 === \t (не Unicode, для ASCII/ANSI)
\u20AC === € (для Unicode)
31
Флаги
32
Флаги в регулярных выражениях
g i m s x
global match
ignore case
multiline matching for ^ and $
33
Альтернативный синтаксис
для флагов
/(?i)foo/
/(?i-m)bar$/
/(?i-sm).x$/
/(?i)foo(?-i)bar/
35
В интернете:
javascript.ru/basic/regular-expression
Книга:
Mastering Regular Expressions
O'Reilly Media
36
Вопросы?
37
Макс Ширшин
Руководитель Службы разработки
интерфейсов Рекламных Технологий