Для успешной работы с регулярными выражениями необходимо знать, что делает каждый специальный символ, флаг и метод. Это шпаргалка регулярных выражений, на которую вы можете ссылаться, пытаясь вспомнить, как работает метод, специальный символ или флаг.
Определение регулярного выражения в JavaScript
Существует два способа определения регулярного выражения в JavaScript.
-
var rgx = /^(\d+)/
— Вы можете использовать литерал регулярного выражения и заключать шаблон между косыми чертами. Это оценивается во время компиляции и обеспечивает лучшую производительность, если регулярное выражение остается постоянным. -
var rgx = new RegExp('^(\d+)')
— функция конструктора полезна, когда регулярное выражение может изменяться программно. Они компилируются во время выполнения.
Соответствие определенному набору символов
Следующие последовательности могут использоваться для соответствия определенному набору символов.
-
\w
— Соответствует всем словам символов. Символы слова являются буквенно-цифровыми (символы az, AZ и подчеркивание). -
\W
— соответствует несловесным символам. Все, кроме буквенно-цифровых символов и подчеркивания. -
\d
— Соответствует цифрам. Любая цифра от 0 до 9. -
\D
— Соответствует нецифровым символам. Все, кроме 0 до 9. -
\s
— Соответствует пробельным символам. Это включает пробелы, табуляции и разрывы строк. -
\S
— Соответствует всем другим символам, кроме пробелов. -
.
— Соответствует любому символу, кроме разрывов строк. -
[AZ]
— Соответствует символам в диапазоне. Например,[AE]
будет соответствовать A, B, C, D и E. -
[ABC]
— Соответствует символу в данном наборе. Например,[AMT]
будет соответствовать только A, M и T. -
[^ABC]
— Подбирает все символы, которых нет в данном наборе. Например,[^AE]
будет соответствовать всем другим символам, кроме A, B, C, D и E.
Указание количества символов для сопоставления
Все вышеприведенные выражения будут соответствовать одному символу за раз. Вы можете добавить квантификаторы, чтобы указать, сколько символов должно быть включено в совпадение одновременно.
-
+
— Соответствует одному или нескольким вхождениям предыдущего токена. Например,\w+
вернет ABD12D как одно совпадение вместо шести разных совпадений. -
*
— Соответствует нулю или более вхождений предыдущего токена. Например,b\w*
соответствует жирным частям в b , bat , bajhdsf bfjhbe . По сути, он соответствует нулю или большему количеству слов после «b». -
{m, n}
— соответствует не менее m и не более n вхождений предыдущего токена.{m,}
будет соответствовать по крайней мере m вхождений, и нет верхнего предела для соответствия.{k}
будет точно соответствовать k вхождений предыдущего токена. -
?
— Соответствует нулю или одному вхождению предыдущего символа. Например, это может быть полезно при сопоставлении двух вариантов написания для одной и той же работы. Например,/behaviou?r/
будет соответствовать поведению и поведению . -
|
— Соответствует выражению до или после символа канала. Например,/se(a|e)/
соответствует как видеть, так и море.
Регулярные выражения, связанные с круглыми скобками
-
(ABC)
— это сгруппирует несколько токенов вместе и запомнит подстроку, подобранную ими для дальнейшего использования. Это называется группой захвата. -
(?:ABC)
— это также сгруппирует несколько жетонов вместе, но не запомнит матч. Это группа без захвата. -
\d+(?=ABC)
— будет соответствовать токену, предшествующему части(?=ABC)
только если за ним следуетABC
. ЧастьABC
не будет включена в матч. Часть\d
— это просто пример. Это может быть любая другая строка регулярного выражения. -
\d+(?!ABC)
— будет соответствовать токену, предшествующему части(?!ABC)
только если за ним не следуетABC
. ЧастьABC
не будет включена в матч. Часть\d
— это просто пример. Это может быть любая другая строка регулярного выражения.
Другие символы регулярного выражения
Есть также некоторые другие символы регулярных выражений, которые не были рассмотрены в предыдущих разделах:
-
^
— Ищите регулярное выражение в начале строки или в начале строки, если включен многострочный флаг. -
$
— Ищите регулярное выражение в конце строки или в конце строки, если включен многострочный флаг. -
\b
— Соответствовать предыдущему токену, только если есть граница слова. -
\B
— Соответствовать предыдущему токену, только если нет границы слова.
Использование флагов с регулярными выражениями
Флаги могут использоваться для управления интерпретацией регулярного выражения. Вы можете использовать флаги отдельно или вместе в любом порядке. Это пять флагов, которые доступны в JavaScript.
-
g
— Искать в строке все совпадения заданного выражения, а не возвращать только первое. -
i
— Сделать поиск нечувствительным к регистру, чтобы такие слова, как Apple, aPPLe и apple, можно было сопоставлять одновременно. -
m
— Этот флаг гарантирует, что токены^
и$
ищут совпадение в начале или конце каждой строки, а не всей строки. -
u
— Этот флаг позволит вам использовать экранирование кодовой точки Unicode в вашем регулярном выражении. -
y
— Это заставит JavaScript искать только совпадение в текущей позиции в целевой строке.
Вы можете указать флаги для регулярного выражения в JavaScript, либо добавив их в конец литерала регулярного выражения, либо передав их конструктору RegExp
. Например, /cat/i
сопоставляет все вхождения cat независимо от регистра, а RegExp("cat", 'i')
делает то же самое.
Полезные методы регулярных выражений в JavaScript
Регулярные выражения, которые вы создаете, используя флаги и последовательности символов, которые мы обсуждали до сих пор, предназначены для использования с различными методами для поиска, замены или разбиения строки. Вот несколько методов, связанных с регулярными выражениями.
-
test()
— Проверьте, содержит ли основная строка подстроку, которая соответствует шаблону, заданному данным регулярным выражением. Возвращаетtrue
в случае успешного совпадения иfalse
противном случае.
1
2
3
4
5
6
7
8
9
|
var textA = ‘I like APPles very much’;
var textB = ‘I like APPles’;
var regexOne = /apples$/i
// Output : false
console.log(regexOne.test(textA));
// Output : true
console.log(regexOne.test(textB));
|
В приведенном выше примере регулярное выражение должно искать слово яблок только в конце строки. Вот почему мы false
в первом случае.
-
search()
— Проверить, содержит ли основная строка подстроку, которая соответствует шаблону, заданному данным регулярным выражением. Возвращает индекс совпадения при успехе и -1 в противном случае.
1
2
3
4
5
6
7
8
9
|
var textA = ‘I like APPles very much’;
var regexOne = /apples/;
var regexTwo = /apples/i;
// Output : -1
console.log(textA.search(regexOne));
// Output : 7
console.log(textA.search(regexTwo));
|
В этом случае первое регулярное выражение вернуло -1, потому что не было точного совпадения с учетом регистра.
-
match()
— Поиск, если основная строка содержит подстроку, которая соответствует шаблону, заданному данным регулярным выражением. Если флагg
включен, несколько совпадений будут возвращены в виде массива.
1
2
3
4
5
|
var textA = ‘All I see here are apples, APPles and apPleS’;
var regexOne = /apples/gi;
// Output : [ «apples», «APPles», «apPleS» ]
console.log(textA.match(regexOne));
|
-
exec()
— Поиск, если основная строка содержит подстроку, которая соответствует шаблону, заданному данным регулярным выражением. Возвращенный массив будет содержать информацию о совпадении и группах захвата.
1
2
3
4
5
6
7
8
|
var textA = ‘Do you like apples?’;
var regexOne = /apples/;
// Output : apples
console.log(regexOne.exec(textA)[0]);
// Output : Do you like apples?
console.log(regexOne.exec(textA).input);
|
-
replace()
— Найти подстроку, соответствующую заданному шаблону, и заменить ее предоставленной строкой замены.
1
2
3
4
5
|
var textA = ‘Do you like aPPles?’;
var regexOne = /apples/i
// Output : Do you like mangoes?
console.log(textA.replace(regexOne, ‘mangoes’));
|
-
split()
— этот метод позволит вам разбить основную строку на подстроки на основе разделителя, заданного как регулярное выражение.
1
2
3
4
5
|
var textA = ‘This 593 string will be brok294en at places where d1gits are.’;
var regexOne = /\d+/g
// Output : [ «This «, » string will be brok», «en at places where d», «gits are.»
console.log(textA.split(regexOne))
|
Вывод
В предыдущих уроках я рассмотрел основы регулярных выражений, а также некоторые более сложные выражения, которые могут оказаться полезными время от времени. Эти два руководства объясняли, как разные символы или последовательности символов работают в регулярных выражениях.
-
Руководство для начинающих по регулярным выражениям в JavaScript
-
Регулярные выражения JavaScript: помимо основ
Если регулярные выражения все еще сбивают вас с толку, я советую продолжать практиковать и смотреть, как другие люди придумывают регулярные выражения для создания определенного шаблона.