Регулярные выражения, или сокращенно RegEx, или ASCII-блевать за вульгарность, — это мощный инструмент для работы с текстом в JavaScript. Они позволяют вам искать, сопоставлять и манипулировать строками способами, которые невозможны с помощью основных строковых методов. Если вы новичок в RegEx, синтаксис и концепции поначалу могут показаться ошеломляющими. Но не волнуйтесь, мы разберем вещи для вас. В этой статье мы познакомим вас с основами RegEx и покажем, как начать использовать их в своих проектах JavaScript. В этой статье вы узнаете о преимуществах использования RegEx и о том, как создавать и тестировать шаблоны, а также использовать RegEx в распространенных методах JavaScript, таких как .match() и .replace(). Давайте начнем!

Это лишь одна из множества статей об ИТ. Мы разбиваем сложные темы на небольшие и удобоваримые содержания. Не стесняйтесь подписаться или поддержать pandaquests, чтобы получить больше интересного контента о JavaScript, веб-разработке и разработке программного обеспечения. Мы стараемся публиковаться несколько раз в неделю. Не пропустите ни одного из наших замечательных материалов.

Регулярные выражения — это мощный инструмент для сопоставления шаблонов в тексте и данных. Их можно использовать для поиска, редактирования и управления текстом и данными различными способами.

Некоторые из преимуществ использования регулярных выражений включают в себя:

  • Эффективность. Регулярные выражения можно использовать для быстрого поиска и обработки больших объемов текста или данных, что делает их эффективным инструментом для таких задач, как проверка данных, очистка данных и перенос данных.
  • Гибкость. Регулярные выражения можно использовать для сопоставления с широким спектром шаблонов, от простых до сложных. Это делает их гибким инструментом, который можно адаптировать к множеству различных задач.
  • Переносимость. Регулярные выражения поддерживаются многими языками программирования и инструментами, что делает их переносимым решением, которое можно использовать в различных средах.
  • Универсальность. Регулярные выражения можно использовать для таких задач, как поиск, замена, извлечение и проверка данных. Эта универсальность делает их полезным инструментом для широкого спектра применений.

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

В JavaScript регулярные выражения представлены объектами RegExp. Вы можете создать объект RegExp с помощью функции конструктора RegExp или с помощью литерала регулярного выражения.

Вот пример создания объекта RegExp с помощью функции-конструктора:

let regex = new RegExp('\\d+');

Вот пример создания объекта RegExp с использованием литерала регулярного выражения:

let regex = /\d+/;

Создав объект RegExp, вы можете использовать его методы для поиска, замены и управления строками. Некоторые из наиболее часто используемых методов:

  • test(): проверяет, соответствует ли строка регулярному выражению, и возвращает true, если есть совпадение, и false в противном случае.
  • exec(): выполняет поиск совпадения в строке и возвращает массив информации о совпадении
  • match(): ищет совпадение в строке и возвращает массив совпавших подстрок
  • search(): ищет указанное значение в строке и возвращает позицию совпадения
  • replace(): ищет в строке указанное значение или регулярное выражение и заменяет совпадающее значение новым значением.

Давайте рассмотрим несколько распространенных выражений RegEx, а также несколько примеров их использования:

Классы персонажей

Вы можете использовать классы символов для соответствия любому из набора символов. Например, [0123456789] будет соответствовать любой цифре. Вот пример регулярного выражения, использующего класс символов для соответствия любой гласной в строке:

const str = "hello world";
const regex = /[aeiou]/g;
const matches = str.match(regex);
console.log(matches); 
// Output: ["e", "o", "o"]

В этом примере регулярное выражение /[aeiou]/g использует класс символов для соответствия любой из гласных (a, e, i, o, u) в строке «hello world». Флаг g используется для выполнения глобального поиска, поэтому он возвращает все совпадения, а не останавливается на первом. Совпадения возвращаются в виде массива, и к ним можно получить доступ с помощью метода .match().

Вы также можете использовать классы символов, чтобы определить диапазон символов для соответствия. Например, вы можете использовать /[a-z]/g для соответствия любой строчной букве в строке или /[0-9]/g для соответствия любой цифре.

Вы также можете отрицать класс символов, который соответствует всему, что не включено в класс. Вот пример:

let str = "Hello World";
let regex = /[^aeiou]/g;
let matches = str.match(regex);
console.log(matches); 
// Output: ["H", "l", "l", " ", "W", "r", "l", "d"]

Это регулярное выражение использует [^aeiou] для соответствия любому символу, который не является гласным. Таким образом, он будет соответствовать всем негласным буквам строки «Hello World».

Чередование

Вы можете использовать символ | для соответствия одному из нескольких вариантов. Например, cat | dog будет соответствовать либо «кошке», либо «собаке». Вот пример использования чередования в JavaScript для соответствия слову «кошка» или слову «собака»:

let pattern = /cat|dog/;
console.log(pattern.test("I have a cat.")); // true
console.log(pattern.test("I have a dog.")); // true
console.log(pattern.test("I have a fish.")); // false

В этом примере шаблон /cat|dog/ будет соответствовать любой строке, содержащей слово «кошка» или слово «собака». Вы также можете использовать чередование для сопоставления нескольких разных слов, разделенных |, например

let pattern = /cat|dog|bird|fish/;
console.log(pattern.test("I have a cat.")); // true
console.log(pattern.test("I have a bird.")); // true
console.log(pattern.test("I have a horse.")); // false

Важно отметить, что оператор чередования имеет более низкий приоритет, чем другие операторы, такие как *, + и ?, поэтому вам может потребоваться использовать круглые скобки для создания желаемого поведения сопоставления.

Группировка

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

let str = "The quick brown fox";
let regex = /(quick) (brown) (fox)/;
let result = str.match(regex);
console.log(result);
// Output: ["quick brown fox", "quick", "brown", "fox"]

В этом примере мы используем регулярное выражение для сопоставления слов «быстрый», «коричневый» и «лиса» в строке «Быстрый коричневый лис». Круглые скобки вокруг каждого слова создают группу, поэтому, когда мы используем метод .match() для строки, группы возвращаются как отдельные элементы результирующего массива. Первый элемент массива — это полное совпадение, а следующие элементы — совпадения для каждой группы в том порядке, в котором они появляются в регулярном выражении.

Вы также можете использовать метод .group() в javascript для извлечения сгруппированных значений, вы можете ссылаться на группы по индексу или по имени, если вы присвоили группе имя.

let str = "The quick brown fox";
let regex = /(?<animal>quick) (?<color>brown) (?<name>fox)/;
let result = str.match(regex);
console.log(result.groups.animal);
// Output: "quick"
console.log(result.groups.color);
// Output: "brown"
console.log(result.groups.name);
// Output: "fox"

В этом примере мы используем именованные группы для извлечения значений animal, color и name.

квантификаторы

Квантификаторы в регулярных выражениях используются для указания того, сколько раз должен совпадать символ, группа или класс символов. Вот несколько примеров использования квантификаторов в JavaScript:

Квантификатор * соответствует нулю или более предшествующих символов или групп:

let regex = /a*/;
console.log(regex.test("")); // true
console.log(regex.test("a")); // true
console.log(regex.test("aaa")); // true

Квантификатор + соответствует одному или нескольким предшествующим символам или группам:

let regex = /a+/;
console.log(regex.test("")); // false
console.log(regex.test("a")); // true
console.log(regex.test("aaa")); // true

Квантификатор ? соответствует нулю или одному из предшествующих символов или групп:

let regex = /a?/;
console.log(regex.test("")); // true
console.log(regex.test("a")); // true
console.log(regex.test("aaa")); // true

Квантификатор {n} точно соответствует n предыдущего символа или группы:

let regex = /a{3}/;
console.log(regex.test("")); // false
console.log(regex.test("a")); // false
console.log(regex.test("aaa")); // true

Квантификатор {n,m} соответствует n и m предыдущего символа или группы:

let regex = /a{2,3}/;
console.log(regex.test("")); // false
console.log(regex.test("a")); // false
console.log(regex.test("aa")); // true
console.log(regex.test("aaa")); // true

Якоря

Якоря в регулярных выражениях — это специальные символы, которые позволяют вам сопоставлять позицию символа, а не сам символ. В JavaScript есть два типа привязок: символ ^, соответствующий началу строки, и символ $, соответствующий концу строки. Вот несколько примеров того, как вы можете использовать якоря в JavaScript:

Чтобы проверить, начинается ли строка с определенного слова, вы можете использовать символ ^ в сочетании со словом, которое вы хотите сопоставить. Например, следующее регулярное выражение будет соответствовать любой строке, начинающейся с «javascript»:

/^javascript/.test("javascript is fun"); // true
/^javascript/.test("I love javascript"); // false

Вы можете использовать символ $ в сочетании со словом, которое вы хотите сопоставить, чтобы проверить, заканчивается ли строка определенным словом. Например, следующее регулярное выражение будет соответствовать любой строке, которая заканчивается на «fun»:

/fun$/.test("javascript is fun"); // true
/fun$/.test("javascript is not fun"); // false

Чтобы проверить, соответствует ли строка определенному слову, вы можете использовать вместе символы ^ и $. Например, следующее регулярное выражение будет соответствовать только строке «javascript»:

/^javascript$/.test("javascript"); // true
/^javascript$/.test("I love javascript"); // false

Имейте в виду, что символы ^ и $ соответствуют только началу и концу всей строки соответственно, а не каждой строке внутри многострочной строки. Если вы хотите сопоставить начало и конец каждой строки, вы можете использовать \A и \z соответственно.

Осмотреться

Lookaround — это тип шаблона регулярного выражения, который позволяет указать шаблон для сопоставления, не включая совпадающий текст в окончательный результат. В регулярных выражениях существует два типа просмотра: положительный просмотр и отрицательный просмотр.

Положительный просмотр вперед (?=) утверждает, что шаблон, непосредственно следующий за просмотром вперед, является истинным, но не включает соответствующий текст в окончательный результат. Например, в следующем регулярном выражении используется положительный просмотр для поиска всех символов «a», за которыми следует «b»:

let regex = /a(?=b)/g;
let string = "aabbcc";
console.log(string.match(regex));  // Output: ["a"]

Отрицательный просмотр вперед (?!) утверждает, что шаблон, следующий сразу за просмотром вперед, является ложным, но не включает совпадающий текст в окончательный результат. Например, в следующем регулярном выражении используется отрицательный поиск вперед для поиска всех символов «a», за которыми не следует «b»:

let regex = /a(?!b)/g;
let string = "aabbcc";
console.log(string.match(regex));  // Output: ["aa"]

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

Кроме того, есть Lookbehind (?<=) и отрицательный lookbehind (?<!), которые похожи на lookahead, но соответствуют шаблону за текущей позицией.

Например:

let regex = /(?<=a)b/g;
let string = "aabbcc";
console.log(string.match(regex));  // Output: ["b"]

Вот оно. Надеемся, вам понравилась эта статья. Есть вопросы? Дайте нам знать и прокомментируйте ниже.

Мы публикуем несколько статей в неделю. Чтобы не пропустить ни одного из них, следите и подписывайтесь на pandaquests. Если вы хотите поддержать нас напрямую, вы можете либо дать чаевые, либо подать заявку на членство по этой ссылке. Используя эту ссылку, 50% вашего вознаграждения перейдет непосредственно к нам. Только благодаря вашей щедрой поддержке мы сможем сохранить частые и качественные наши статьи. Заранее спасибо и удачного кодирования!

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .

Заинтересованы в масштабировании запуска вашего программного обеспечения? Ознакомьтесь с разделом Схема.