3. Виды регулярных выражений
• POSIX (BRE, ERE)
• PCRE = Perl-Compatible Regular Expressions
Цитата из стандарта языка JavaScript:
«Вид и функциональность регулярных
выражений в JavaScript реализованы
по подобию подсистемы регулярных
выражений в языке программирования Perl 5»
3
4. JS-синтаксис (очень кратко)
var re = /^foo/;
// boolean
re.test('строка');
// null или Array
re.exec('строка');
4
5. Из чего состоят регэкспы
1. Символы
— обычные
— специальные (метасимволы)
2. Операции
— квантификация
— перечисление
— группировка
5
11. Пробельные символы
/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
12. Буквы и цифры
/d/ ~ цифры от 0 до 9
/w/ ~ буквы, цифры и подчёркивание
В JS не работает для русских букв!
И наоборот:
/D/ ~ всё, кроме цифр
/W/ ~ всё, кроме букв и цифр
12
13. Произвольные классы символов
Пример:
/[abc123]/
Работают метасимволы и диапазоны:
/[A-Fd]/
Можно указать несколько диапазонов:
/[a-cG-M0-7]/
ВАЖНО: диапазоны берутся из Юникода.
При работе с кириллическими диапазонами
проверьте порядок символов в Юникоде!
13
14. Произвольные классы символов
символ «точка» — просто точка!
/[.]/.test('anything') // false
символы: ] -
/[]-]/
14
31. Представление символов
x09 === t (не Unicode, для ASCII/ANSI)
u20AC === € (для Unicode)
обратный slash убирает специальное
значение у символа
/()/.test('()') // true
/n/.test('n') // true
иногда верно и обратное
/f/.test('f') // false!
31
33. Флаги в регулярных выражениях
g i m s x
global match
ignore case
multiline matching for ^ and $
нет поддержки в JS для:
string as single line
extend pattern
33
34. Альтернативный синтаксис
для флагов
/(?i)foo/
/(?i-m)bar$/
/(?i-sm).x$/
/(?i)foo(?-i)bar/
Не все реализации поддерживают
переключение флагов внутри regexp.
JS при таком синтаксисе включает флаги на
весь regexp сразу и не даёт менять.
34