https://www.regular-expressions.info - документация на английском.
regExr.com - конструктор (браузер - js & сервер PHP/PCRE)
pagecolumn.com - конструктор JS и PHP
Флаги (модификаторы)
В js записываются после выражения: /regexp/flags
В Fiddler (.NET) - перед: (?flags)regexp
JS
i - ignoreCase (регистронезависимый)
g - global (все совпадения)
m - multiLine (многострочый режим) - изменяет поведение границ (^ и $)
var regExp = /.+/igm;FIDDLER
n - превращает все неименованные группы в группы без захвата.
s - в однострочном режиме делает '.' совпадением со всеми символами, включая разрыв строк (\r\n)
x - режим свободного пробела пробельные символы игнорируются, но не '\ d'
(?insx)regexp
^ // /^A/ ==>'A', если с неё начинается текст (строка при установленном флаге /^0/m)
$ // /A$/ ==>'A', если это последний символ в тексте (строке, при флаге /m)
\b // граница слова.
<!-- С русским языком не работает! Только символы \w ! -->
/\bjava\b/ // Шаблон соответствует 'java' только если это слово целиком
// т.е. окружено пробельными символами, а точнее символами \W ==> 'java!' тоже подойдет/a/ // литерал, соответствует 'a'
// набор
/[123]a/ // 1a, 2a, 3a
// диапазон
/[1-3]/ // 1, 2, 3
// набор + диапазон (по номерам Unicode)
/[1-3a-c]/ // 1, 2, 3, a, b, c
/[^123] // любой символ, кроме 1, 2, 3Для экранирования используется символ '\'
Внутри [ ] можно НЕ экранировать:
-
. + ( ) [
-
- если он в начале или конце
-
^ если не в начале
\d => [0-9]
\D => [^0-9]
\w => [a-zA-z0-9_]
\W => [^\w]
\s // пробел, табуляция, символы перевода строк
\S // НЕ пробельный символ
. // любой символ, кроме символов первода строк (\r \n )
[^] // вообще любой символ в js, но в PCRE не работает - приводит к ошибке!Используются с символами и группами ( )
/\w{5}/ // 5 любых символов подряд
/\w{3,5}/ // от 3 до 5 любых символов подряд
/\w{3,}/ // от 3 любых символов подрядКороткая запись часто используемых квантификаторов:
+ // ==> {1,} Один или несколько символов(групп) ( /\w+/ = /\w{1,} )
* // ==> {0,} 0 или несколько
? // ==> {0,1} Может быть, а может нет (0 или 1 раз)исходная строка для поиска
<p>Text</p>
-
Жадная (greedy)
включена по умолчанию/<[^]*>/g<p>Text</p> - найдет максимально длинный вариант
- найден символ <
- [^] дойдет до конца текста (ведь любой символ)
- откатится на 1 символ назад (циклично) пока не найдет >
-
Ленивая (lazy)
включается добавлением "?" после квантификатора (напр. +?, *?, ??, {0,5}?)/<[^]*?>/g<p>Text</p> - найдет самый короткий(е) вариант
- найден символ <
- [^] после каждого совпадения, будет проверять оставшуюся часть шаблона (за квантификатором).
Здесь можно добится того же результата при жадной квантификации, изменив шаблон на /<[^>]*>/g
-
Сверхжадная или ревнивая (possesive)
= жадная без отката (3-го шага)
в js НЕ реализована.
| - или
/red|green|\d{3}/g // red или green или 123 (и любое 3-значное число)
/авто(страда|бан)/g // скобки задают границы альтернации(?=..regExp) - просматривает, но не включает совпадение в результат.
/java(?=Script)/g // java, если за ним следует Script (positive)java javaScript
/java(?!=Script)/g // java, если за ним НЕ следует Script (negative)java javaScript
Используется для группировки части шаблона с целью
- квантификации /(mur)+/g
- доступа к части совпадения по номеру скабочной группы (с 1 слева-направо)
! Группа (?: ...) не получает номер
// Необходимо найти в тексте строку в кавычках.
// Кавычки могут быть одинарными '...' или двойными "..."
/['"](.*?)['"]/ // найдет не только "..." и '...', но и "...', '..."
/(['"])(.*?)\1/ // найдет только парные кавычки
// \1 будет заменео либо на ' либо на " (на сопоставление для скобочной группы №1)