В JavaScript регулярные выражения представлены объектами RegExp. Объекты RegExp могут быть созданы посредством конструктора RegExp(), но чаще они создаются с помощью специального синтаксиса литералов. Так же как строковые литералы задаются в виде символов, заключенных в кавычки, литералы регулярных выражений задаются в виде символов, заключенных в пару символов слэша /.
/pattern/флаги
new RegExp("pattern"[, опции поиска])
pattern - регулярное выражение для поиска (о замене - позже), а флаги - строка из любой комбинации символов g(глобальный поиск), i(регистр неважен) и m(многострочный поиск). Первый способ используется часто, второй - иногда. Например, два таких вызова эквивалентны.
Опции поиска
При создании регулярного выражения мы можем указать дополнительных опции поиска
i
ignore case
Не различать строчные и прописные буквы.
g
global search
Глобальный поиск всех вхождений образца.
m
multiline
Многострочный ввод должен рассматриваться как несколько строк. Если используется флаг m, то ^и $совпадают в начале и в конце любой строки общей строки ввода, вместо начала и конца всей строки ввода.
Символы в регулярных выражениях JavaScript
Символ
Соответствие
Алфавитно-цифровые символы
Соответствуют сами себе
\0
Символ NUL (\u0000)
\t
Табуляция (\u0009)
\n
Перевод строки (\u000A)
\v
Вертикальная табуляция (\u000B)
\f
Перевод страницы (\u000C)
\r
Возврат каретки (\u000D)
\xnn
Символ из набора Latin, задаваемый шестнадцатеричным числом nn; например, \x0A - это то же самое, что \n
\uxxxx
Unicode-символ, заданный шестнадцатеричным числом xxxx; например, \u0009 - это то же самое, что \t
\cX
Управляющий символ "X", например, последовательность \cJ эквивалентна символу перевода строки \n
\
Для обычных символов - делает их специальными. Например, выражение /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," но найдет оба a в "caandy," и первые два a в "caaandy."
{n,}
Где n - положительное целое число. Находит n и более повторений элемента. Например, /a{2,}не найдет 'a' в "candy", но найдет все 'a' в "caandy" и в "caaaaaaandy."
{n,m}
Где n и m - положительные целые числа. Находят от n до m повторений элемента.
[xyz]
Набор символов. Находит любой из перечисленных символов. Вы можете указать промежуток, используя тире. Например, [abcd]- то же самое, что [a-d]. Найдет 'b' в "brisket", а также 'a' и 'c' в "ache".
[^xyz]
Любой символ, кроме указанных в наборе. Вы также можете указать промежуток. Например, [^abc]- то же самое, что [^a-c]. Найдет 'r' в "brisket" и 'h' в "chop."
[\b]
Находит символ backspace. (Не путать с \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/ или /[0-9]/найдет '2' в "B2 is the suite number."
\D
Найдет нецифровой символ (все алфавиты). [^0-9]- эквивалент для обычных цифр. Например, /\D/или /[^0-9]/найдет 'B' в "B2 is the suite number."
\s
Найдет любой пробельный символ, включая пробел, табуляцию, переводы строки и другие юникодные пробельные символы. Например, /\s\w*/найдет ' bar' в "foo bar."
\S
Найдет любой символ, кроме пробельного. Например, /\S\w*/найдет 'foo' в "foo bar."
\v
Символ вертикальной табуляции.
\w
Найдет любой словесный (латинский алфавит) символ, включая буквы, цифры и знак подчеркивания. Эквивалентно [A-Za-z0-9_]. Например, /\w/найдет 'a' в "apple," '5' в "$5.28," и '3' в "3D."
\W
Найдет любой не-(лат.)словесный символ. Эквивалентно [^A-Za-z0-9_]. Например, /\W/и /[^$A-Za-z0-9_]/одинаково найдут '%' в "50%."
Работа с регулярными выражениями в Javascript
Работа с регулярными выражениями в Javascript реализована методами класса String
exec(regexp) - находит все совпадения (вхождения в шаблон "регулярки") в строке. Возвращает массив (при совпадении) и обновляет свойство regexp-а, или null - если ничего не найдено,. С модификатором g - при каждом вызове этой функции, она будет возвращать следующее совпадение после предыдущего найденного - это реализовано с помощью ведения индекса смещения последнего поиска.
match(regexp) - найти часть строки по шаблону. Если указан модификатор g, то функция match() возвращает массив всех совпадений или null (а не пустой массив). Без модификатора g эта функция работает как exec();
test(regexp) - функция проверяет строку на соответствие шаблону. Возвращает true- если есть совпадение, и false- если совпадения нет.
split(regexp) - разбивает строку, для которой он вызван, на массив подстрок, используя аргумент в качестве разделителя.
replace(regexp, mix) - метод возвращает строку изменную в соответствии с шаблоном (регуляррным выражением). Первый параметр regexp также может содержать строку, а не регулярное выражение. Без модификатора g- метод в строке заменяет только первое вхождение; с модификатором g- происходит глобальная замена, т.е. меняются все вхождения в данной строке. mix- шаблон замены, может принитать значения строки, шаблона замены, функции (имя функции).
Спецсимволы в строке замены
$$
Вставляет "$".
$&
Вставляет найденную подстроку.
$`
Вставляет часть строки, которая предшествует найденному вхождению.
$'
Вставляет часть строки, которая идет после найденного вхождения.
$n or $nn
Где n или nn - десятичные цифры, вставляет подстроку вхождения, запомненную n-й вложенной скобкой, если первый аргумент - объект RegExp.
Замена через функцию
Если Вы указываете вторым параметром функцию, то она выполняется при каждом совпадении. В функции можно динамически генерировать и возвращать строку подстановки. Первый параметр функции - найденная подстрока. Если первым аргументом replace является объект RegExp, то следующие n параметров содержат совпадения из вложенных скобок. Последние два параметра - позиция в строке, на которой произошло совпадение и сама строка.
function styleHyphenFormat(propertyName)
function upperToHyphenLower(match)
{
return '-' + match.toLowerCase();
}
return propertyName.replace(/[A-Z]/, upperToHyphenLower);
}
//преобразовать borderTop к border-top:
styleHyphenFormat('borderTop');