Статьи

Шпаргалка по регулярным выражениям 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') делает то же самое.

Регулярные выражения, которые вы создаете, используя флаги и последовательности символов, которые мы обсуждали до сих пор, предназначены для использования с различными методами для поиска, замены или разбиения строки. Вот несколько методов, связанных с регулярными выражениями.

  • 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: помимо основ

Если регулярные выражения все еще сбивают вас с толку, я советую продолжать практиковать и смотреть, как другие люди придумывают регулярные выражения для создания определенного шаблона.