Источник: http://javascript.ru/RegExp
// полная форма записи
var expr = new RegExp(pattern [, flags]);
// сокращенная форма записи (литеральный формат)
var expr = /pattern/flags;
flags Способы поиска по шаблону:
Порядок указания флагов не имеет значения.
Когда регулярное выражение создается при помощи конструктора new RegExp(…)
, необходимо помнить, что обратные слеши (\)
должны экранироваться, например:
var expr = new RegExp('\\w', 'ig');
При использовании литерального формата, этого делать не нужно:
var expr = /\w/gi;
Обе записи эквивалентны. Первый вариант может понадобится, если вам придется генерировать регулярное выражение динамически.
В регулярных выражениях различают следующие виды символов:
Обычные символы
A..z
— английские буквы от A до z, строчные и заглавные;0..9
— цифры;{ }
— фигурные скобки, кроме случаев, когда они составляют группу вида {n,m}
(где n
и m
— числа) и её вариации;=
— равно;<
— меньше;>
— больше;-
— минус;,
— запятая;Специальные символы
( )
— круглые скобки;[ ]
— квадратные скобки;\
— обраный слеш;.
— точка;^
— степень;$
— знак доллара;|
— вертикальная черта;?
— вопросительный знак;+
— плюс.(Прим. автора конспекта) Из-за особенностей построения таблиц символ |
будет заменен на *прямой слэш*
.
Символ | Значение |
---|---|
\ |
Для обычных символов - делает их специальными. Например, выражение /s/ ищет просто символ 's' . А если поставить \ перед s , то /\s/ уже обозначает пробельный символ.И наоборот, если символ специальный, например * , то \ сделает его просто обычным символом "звездочка". Например, /a*/ ищет 0 или больше подряд идущих символов 'a' . Чтобы найти а со звездочкой 'a*' - поставим \ перед спец. символом: /a\*/ . |
^ |
Обозначает начало входных данных. Если установлен флаг многострочного поиска ("m") , то также сработает при начале новой строки.Например, /^A/ не найдет 'A' в "an A" , но найдет первое 'A' в "An A." |
$ |
Обозначает конец входных данных. Если установлен флаг многострочного поиска, то также сработает в конце строки.Например, /t$/ не найдет 't' в "eater" , но найдет - в "eat" . |
* |
Обозначает повторение 0 или более раз. Например, /bo*/ найдет 'boooo' в "A ghost booooed" и 'b' в "A bird warbled" , но ничего не найдет в "A goat grunted" . |
+ |
Обозначает повторение 1 или более раз. Эквивалентно {1,} . Например, /a+/ найдет 'a' в "candy" и все 'a' в "caaaaaaandy" . |
? |
Обозначает, что элемент может как присутствовать, так и отсутствовать. Например, /e?le?/ найдет 'el' в "angel" и 'le' в "angle." Если используется сразу после одного из квантификаторов * , + , ? , или {} , то задает "нежадный" поиск (повторение минимально возможное количество раз, до ближайшего следующего элемента паттерна), в противоположность "жадному" режиму по умолчанию, при котором количество повторений максимально, даже если следующий элемент паттерна тоже подходит.Кроме того, ? используется в предпросмотре, который описан в таблице под (?=) , (?!) , и (?: ) . |
. |
(Десятичная точка) обозначает любой символ, кроме перевода строки: \n \r \u2028 or \u2029 . (можно использовать [\s\S] для поиска любого символа, включая переводы строк). Например, /.n/ найдет 'an' и 'on' в "nay, an apple is on the tree" , но не 'nay' . |
(x) |
Находит x и запоминает. Это называется "запоминающие скобки". Например, /(foo)/ найдет и запомнит 'foo' в "foo bar." Найденная подстрока хранится в массиве-результате поиска или в предопределенных свойствах объекта RegExp : $1, ..., $9 .Кроме того, скобки объединяют то, что в них находится, в единый элемент паттерна. Например, (abc)* - повторение abc 0 и более раз. |
(?:x) |
Находит x , но не запоминает найденное. Это называется "незапоминающие скобки". Найденная подстрока не сохраняется в массиве результатов и свойствах RegExp .Как и все скобки, объединяют находящееся в них в единый подпаттерн. |
x(?=y) |
Находит x , только если за x следует y . Например, /Jack(?=Sprat)/ найдет 'Jack' , только если за ним следует 'Sprat' . /Jack(?=Sprat *прямой слэш* Frost)/ найдет 'Jack' , только если за ним следует 'Sprat' или 'Frost' . Однако, ни 'Sprat' ни 'Frost' не войдут в результат поиска. |
x(?!y) |
Соответствует 'x' только если за 'x' не следует 'y' . Это называется отрицательное упреждение. Например, /\d+(?!\.)/ соответствует числу только если за ним не следует десятичная точка. Регулярное выражение /\d+(?!\.)/.exec("3.141") сопоставит '141' , но не '3.141' . |
x *прямой слэш* y |
Соответствует либо 'x' либо 'y' . Например, /green *прямой слэш* red/ соответствует 'green' в "green apple" и 'red' в "red apple." |
{n} |
n - положительное целое. Соответствует ровно n вхождениям предыдущего символа. Например, /a{2}/ не соответствует 'a' в "candy," но соответствует всем а в "caandy" , первым двум а в "caaandy." |
{n,m} |
m и n - положительные целые. Соответствует как минимум n и максимум m вхождениям предыдущего символа. При m=n=0 пропускается. Например, /a{1,3}/ ничему не соответствует в строке "cndy" , символу 'a' в "candy" , двум а в "caandy" , и трем первым а в "caaaaaaandy" . Отметим, что при сопоставлении "caaaaaaandy" , совпадает "aaa" , хотя изначальная строка содержит больше а . |
[xyz] |
Набор символов. Соответствует любому символу из перечисленных. Можно указать диапазон символов используя тире. Специальные символы (как точка (.) и звездочка (*) ) не имеют специального значения внутри такого набора.Их не надо экранировать. Экранирование работает так же. Например, [abcd] эквивалентна [a-d] . Они соответствуют 'b' в "brisket" и 'c' в "city" . /[a-z.]+/ и /[\w.]+/ обе соответствуют всему в "test.i.ng" . |
[^xyz] |
Инвертированный или дополняющий набор символов. Это означает соответствие всему, что не в скобках. Можно указать диапазон символов с помощью тире. Все, что действует в обычном наборе символов, действует и здесь. Например, [^abc] эквивалентно [^a-c] . Они соответствуют изначально 'r' в "brisket" и 'h' в "chop." |
[\b] |
Соответствует бэкспейсу (U+0008). (Не путать с \b. ) |
\b |
Находит границу слов (латинских), например пробел. (Не путать с [\b] ). Например, /\bn\w/ найдет 'no' в "noonday" ; /\wy\b/ найдет 'ly' в "possibly yesterday." |
\B |
Обозначает не границу слов. Например, /\w\Bn/ найдет 'on' в "noonday" , а /y\B\w/ найдет 'ye' в "possibly yesterday." |
\cX |
Где X - буква от A до Z. Обозначает контрольный символ в строке. Например, /\cM/ обозначает символ Ctrl-M . |
\d |
Соотвествует цифровому символу. Эквивалентно выражению [0-9] . Например, /\d/ or /[0-9]/ соотвествует '2' в "B2 is the suite number." |
\D |
Найдет нецифровой символ (все алфавиты). [^0-9] - эквивалент для обычных цифр. Например, /\D/ или /[^0-9]/ найдет 'B' в "B2 is the suite number." |
\f |
Соотвествует символу прогона страницы (U+000C). Особый символ управления печатью. |
\n |
Соотвествует символу перевода строки (U+000A). |
\r |
Соотвествует символу возврата каретки (U+000D). |
\s |
Соотвествует одиночному символу пустого пространства, включая пробел, табуляция, прогон страницы, перевод строки. Эквивалентен [ \f\n\r\t\v\u00A0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u2028\u2029\u202f\u205f\u3000]. Например, /\s\w*/ совпадает с ' bar' в "foo bar." |
\S |
Соотвествует одничному символу непустого пространства. Эквивалентен [^ \f\n\r\t\v\u00A0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u2028\u2029\u202f\u205f\u3000] . Например, /\S\w*/ совпадает с 'foo' в "foo bar." |
\t |
Соотвествует символу горизонтальной табуляции (U+0009). |
\v |
Соотвествует символу вертикальной табуляции (U+000B). |
\w |
Соотвествует любому цифробуквенному символу включая нижнее подчеркивание. Эквивалентен [A-Za-z0-9_] . Например, /\w/ совпадает с 'a' в "apple," '5' в "$5.28," и '3' в "3D." |
\W |
Соотвествует любому нецифробуквенному символу. Равносилен [^A-Za-z0-9_] . Например, /\W/ or /[^A-Za-z0-9_]/ совпадает с '%' в "50%." |
\0 |
Найдет символ NUL. Не добавляйте в конец другие цифры. |
\xhh |
Найдет символ с кодом hh (2 шестнадцатиричных цифры) |
\uhhhh |
Найдет символ с кодом hhhh (4 шестнадцатиричных цифры). |
var re = /(\w+)\s(\w+)/;
var str = "John Smith";
var newstr = str.replace(re, "$2, $1");
alert(newstr); // "Smith, John"