0% нашли этот документ полезным (0 голосов)
4K просмотров38 страниц

Javascript Regular Expression

Документ содержит презентацию о регулярных выражениях. В ней рассматриваются основные элементы регулярных выражений, такие как символы, операции, метасимволы, классы символов, квантификаторы, группировки и флаги.

Загружено:

Marc Aurele Emmanuel
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
4K просмотров38 страниц

Javascript Regular Expression

Документ содержит презентацию о регулярных выражениях. В ней рассматриваются основные элементы регулярных выражений, такие как символы, операции, метасимволы, классы символов, квантификаторы, группировки и флаги.

Загружено:

Marc Aurele Emmanuel
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 38

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

Макс Ширшин
Руководитель Службы разработки интерфейсов
Рекламных Технологий

Школа Разработки Интерфейсов Яндекса


Вместо предисловия

2
Виды регулярных выражений
• POSIX (BRE, ERE)

• PCRE = Perl-Compatible Regular Expressions


Цитата из стандарта языка JavaScript:

«Вид и функциональность регулярных


выражений в JavaScript реализованы
по подобию подсистемы регулярных
выражений в языке программирования Perl 5»

3
JS-синтаксис (очень кратко)

var re = /^foo/;

// boolean
re.test('строка');

// null или Array


re.exec('строка');

4
Из чего состоят регэкспы
1. Символы
— обычные
— специальные (метасимволы)

2. Операции
— квантификация
— перечисление
— группировка

5
Метасимволы

6
Любой символ
/./.test('foo'); // true

/./.test('\r\n') // false

Что вы хотели на самом деле:


/[\s\S]/ для JS
или
/./s (не работает в JS)

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

/\w/ ~ буквы, цифры и подчёркивание


В JS не работает для русских букв!

И наоборот:
/\D/ ~ всё, кроме цифр
/\W/ ~ всё, кроме букв и цифр

12
Произвольные классы символов
Пример:
/[abc123]/

Работают метасимволы и диапазоны:


/[A-F\d]/

Можно указать несколько диапазонов:


/[a-cG-M0-7]/

ВАЖНО: диапазоны берутся из Юникода.


При работе с кириллическими диапазонами
проверьте порядок символов в Юникоде!
13
Произвольные классы символов

символ «точка» — просто точка!


/[.]/.test('anything') // false

символы: \ ] -
/[\\\]-]/

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

/bo{5,}/ 5 или более

в 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"

>>> /best(?! match)/.test('best match')


false

27
Перечисление

28
Логическое «или»

/red|green|blue light/
/(red|green|blue) light/

>>> /var a(;|$)/.test('var a')


true

29
Представление символов

30
Представление символов
\x09 === \t (не Unicode, для ASCII/ANSI)
\u20AC === € (для Unicode)

обратный slash убирает специальное


значение у символа
/\(\)/.test('()') // true
/\\n/.test('\\n') // true

иногда верно и обратное


/\f/.test('f') // false!

31
Флаги

32
Флаги в регулярных выражениях
g i m s x

global match
ignore case
multiline matching for ^ and $

нет поддержки в JS для:


string as single line
extend pattern

33
Альтернативный синтаксис
для флагов
/(?i)foo/
/(?i-m)bar$/
/(?i-sm).x$/
/(?i)foo(?-i)bar/

Не все реализации поддерживают


переключение флагов внутри regexp.

JS при таком синтаксисе включает флаги на


весь regexp сразу и не даёт менять.
34
Что почитать

35
В интернете:
javascript.ru/basic/regular-expression

Книга:
Mastering Regular Expressions
O'Reilly Media

36
Вопросы?

37
Макс Ширшин
Руководитель Службы разработки
интерфейсов Рекламных Технологий

[email protected]

Вам также может понравиться