Пять практических примеров использования регулярных выражений

Пять практических примеров использования регулярных выражений

Содержание
  1. Как работает RegEx?
  2. Проверка данных
  3. Поиск и замена
  4. Извлечение данных
  5. Разбор журнала
  6. Очистка данных
  7. Заключение

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

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

С помощью Regex вы можете обрабатывать файлы журналов, извлекать определенные данные из текстовых документов, перенаправлять URL-адреса, проверять вводимый пользователем текст в веб-формах и т. д.

Как работает RegEx?

RegEx работает путем определения шаблона, который представляет собой определенный набор символов или последовательностей. Затем этот шаблон применяется к целевому тексту для выявления совпадений или выполнения преобразований. Вот краткий обзор синтаксиса regex с указанием основных компонентов и наиболее часто используемых операций:

  1. Литералы: Регулярные выражения могут состоять из литеральных символов, которые точно совпадают друг с другом. Например, шаблон “hello” будет соответствовать строке “hello” в целевом тексте.
  2. Метасимволы: Метасимволы - это специальные символы, имеющие особое значение в регулярном выражении. Примеры:
  • . (точка): сопоставляет любой символ, кроме символа новой строки.
  • * (звездочка): соответствует одному или нескольким экземплярам любого символа.
  • + (плюс): Сопоставляет одно или несколько вхождений предыдущего символа.
  • ? (вопросительный знак): сопоставляет ноль или одно вхождение предыдущего символа.
  • [] (квадратные скобки): Определяют класс символов, сопоставляя любой символ внутри скобок.
  • () (круглые скобки): Создает группу захвата для захвата совпадающих подшаблонов.
  1. Модификаторы: Модификаторы задают дополнительные правила для сопоставления. Общие модификаторы включают:
  • i: Подбор без учета регистра.
  • g: Глобальное соответствие (соответствует всем вхождениям, а не останавливается на первом совпадении).
  • m: Многострочное соответствие.
  1. Якоря: Якоря используются для указания позиции совпадения в тексте. Примеры включают:
  • ^ (каретка): Сопоставляет начало строки.
  • $ (знак доллара): Сопоставляет конец строки.

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

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

Проверка данных

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

  • Проверка электронной почты

Проверка электронной почты - это способ подтверждения законности и правильности адреса электронной почты. Она подразумевает определение того, правильно ли отформатирован или существует адрес электронной почты. Проверка электронной почты гарантирует, что полученные или предоставленные адреса электронной почты действительны и пригодны для общения.

  • Проверка паролей Проверка паролей - один из важных вариантов использования регулярных выражений. С помощью RegEx можно создать простое приложение и ввести шаблон проверки пароля, и если он не соответствует требованиям, то пользователь не войдет в систему.

Давайте создадим простое приложение, которое позволит вам понять, как работают проверка электронной почты и пароля. Вставьте следующий код в HTML-файл.

<!doctype html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Валидированная форма регистрации</title>
		<link rel="stylesheet" href="style.css" />
	</head>

	<body>
		<div class="container">
			<h2 class="label">Сведения о пользователе</h2>
			<div class="Reg_form" action="login.html" method="post" name="Login-form">
				<label class="Fname">Email $ Phone No</label>
				<input type="text" name="email" id="mail" />
				<div id="ERROR">Пожалуйста, введите правильные данные</div>
				<label id="Fpassword">Пароль</label>
				<input type="text" name="Password" id="Pass" />
				<div id="InvalidPassword">Примечание! Вводите только правильный пароль</div>

				<button type="button" onclick="validated()">Зарегистрируйтесь здесь</button>.
			</div>
		</div>

		<script src="style.js"></script>
	</body>
</html>

Давайте добавим файл сценария, создадим Script.js и добавим следующий код.

function validated() {
	var emailInput = document.getElementById('mail').value;
	var passwordInput = document.getElementById('Pass').value;

	// Регулярные выражения для проверки почты и пароля
	var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
	var passwordRegex = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/;

	if (!emailRegex.test(emailInput)) {
		document.getElementById('ERROR').style.display = 'block';
		document.getElementById('InvalidPassword').style.display = 'none';
		return false;
	} else if (!passwordRegex.test(passwordInput)) {
		document.getElementById('ERROR').style.display = 'none';
		document.getElementById('InvalidPassword').style.display = 'block';
		return false;
	} else {
		document.getElementById('ERROR').style.display = 'none';
		document.getElementById('InvalidPassword').style.display = 'none';
		window.location.href = 'login.html';
		return true;
	}
}

Этот код позволяет ввести электронное письмо и проверяет его формат, включая доменное имя. Он также проверяет введенный пароль на соответствие заданным критериям и выводит сообщение об ошибке, если критерии не соблюдены.

Мы определили два регулярных выражения, emailRegex и passwordRegex. Для emailRegex символ ^ указывает на начало строки. Шаблон [^s@]+ обозначает один или несколько символов. Символ @ обозначает часть имени пользователя в электронном письме. Шаблон \. обозначает литеральный символ, точку, и, наконец,

символ $ указывает на конец строки.

Что касается passwordRegex, то шаблон /^(?=.\d) указывает на то, что в пароле должна быть хотя бы одна цифра. (?=.[a-z]) указывает на необходимость включения одной или нескольких строчных букв, а (?=.*[A-Z]) - на необходимость включения хотя бы одной прописной буквы. Шаблон .{8,}$/ гарантирует, что длина пароля составит не менее 8 символов. Если строка соответствует всем шаблонам, ее следует считать правильным, надежным паролем, в противном случае она не соответствует требованиям. Таким образом, в журнале появляется сообщение Неверный пароль.

Основная задача этого простого приложения - обеспечить предоставление пользователями точных и безопасных адресов электронной почты и паролей. С помощью тестов проверки приложение эффективно предотвращает ввод неверных или недействительных данных и оперативно уведомляет пользователей об ошибках. Обеспечение немедленной обратной связи в процессе ввода способствует целостности данных, повышает их безопасность и улучшает общий пользовательский опыт. Не забудьте указать точный URL-адрес страницы перенаправления, на которую вы хотите направить пользователей после успешного входа в систему.

В контексте проверки электронной почты и пароля RegEx обеспечивает безопасность, применяя определенные критерии. Например, в разделе паролей приведенного выше кода мы устанавливаем такие требования, как минимальная длина, включая заглавные и строчные буквы, цифры или специальные символы. Это позволяет нам создавать надежные и безопасные пароли.

Аналогично, адреса электронной почты имеют определенную структуру, которая должна соблюдаться, чтобы считаться действительной. RegEx позволяет определить шаблон, который представляет собой правильный формат адреса электронной почты. Эти шаблоны проверяют наличие таких важных компонентов, как символ ”@”, чтобы обеспечить правильное форматирование электронной почты и сохранить целостность контактной информации.

Поиск и замена

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

const text = 'Привет, [имя]! Как дела, [имя]?';
const namePattern = /\[имя\]/g;
const replacement = 'Джон';

const replacedText = text.replace(namePattern, replacement);
console.log(replacedText);

// Привет, Джон! Как поживаешь, Джон?

В приведенном выше коде мы определяем переменную text с примером предложения, содержащего шаблон [name] дважды. Переменная namePattern - это шаблон регулярного выражения \[name\], который соответствует точной строке ”[name]“. Флаг g добавлен для выполнения глобального поиска и замены.

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

Мы задаем переменную replacement как “John”, чтобы заменить найденный шаблон. Используя метод replace() для переменной text строка с имяПаттерна и замена в качестве аргументов, мы получим новую строку с замененными совпадающими шаблонами.

Таким образом, в контекстном смысле ”поиск” означает использование регулярного выражения namePattern для выявления всех вхождений шаблона [name] в текстовую переменную, а ”замена” означает замену всех этих вхождений содержимым, указанным в переменной replacement, которое в данном примере равно “John”.

Извлечение данных

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

const text =
	'Посетите наш сайт https://www.example.com для получения дополнительной информации. Для покупок онлайн перейдите по адресу https://shop.example.com.';

const urlPattern = /https?:\/\/[^\s]+/g;
const extractedURLs = text.match(urlPattern);

console.log('Извлеченные URL:');
console.log(extractedURLs);

В приведенном выше примере у нас есть переменная text, которая содержит образец текста с вложенными в него URL-адресами. Мы определяем переменную urlPattern как шаблон регулярного выражения для соответствия URL. Шаблон https?:\/\/[^\s]+ соответствует URL, начинающимся с “http://” или “https://”, и захватывает все символы, не являющиеся пробелами, после этого.

Используя метод match() для строки text с urlPattern, мы можем извлечь все URL в тексте. Метод возвращает массив extractedURLs, содержащий извлеченные URL.

В данном случае на выходе мы получим:


Извлеченные URL:
[
'https://www.example.com',
'https://shop.example.com'
]

Этот пример демонстрирует, как регулярные выражения позволяют эффективно извлекать URL из текста.

Разбор журнала

Говоря простым языком, разбор журнала - это процесс извлечения информации из журнала с целью ее обработки и использования в качестве входных данных для другой операции записи журнала. Эта информация может включать действия пользователя, временные метки и сообщения об ошибках. Одним из преимуществ разбора журнала является то, что он полезен для выявления угроз безопасности и устранения неполадок.

Например, если у нас есть журнал со следующей структурой данных:


[2023-07-01 15:30:20] INFO: Приложение запущено.
[2023-07-01 15:32:45] ERROR: Не удалось установить соединение с базой данных.
[2023-07-01 15:34:12] INFO: Пользователь вошел в систему (имя пользователя: john_doe).
[2023-07-01 15:40:03] WARNING: Disk space low, consider freeing space.
[2023-07-01 15:45:18] ERROR: Request timed out (url: /api/data).

…который был сохранен в файле sample.log, и мы пытаемся получить доступ к строкам с меткой “ERROR” с помощью регулярных выражений, мы можем использовать Node.js со встроенным модулем fs для чтения файла журнала и фильтрации соответствующих записей журнала.

Вот улучшенный код JavaScript для достижения этой цели с помощью RegEx:

const fs = require('fs');

const logFilePath = 'sample.log';

fs.readFile(logFilePath, 'utf8', (err, data) => {
	if (err) {
		console.error(`Ошибка чтения ${logFilePath}: ${err.message}`);
		return;
	}

	const errorLines = data.match(/^\[._\] ERROR:._/gm);

	console.log('Записи в журнале с меткой "ERROR":');
	console.log(errorLines.join('\n'));
});

В приведенном выше коде мы читаем содержимое файла sample.log, используя fs.readFile(), как и раньше. Затем мы используем метод match()для строкиdataс шаблоном RegEx^[.] ERROR., чтобы найти и извлечь строки, которые начинаются с временной метки в виде выражения со скобками ([…]) и имеют метку "ERROR". Флаги gm` совпадают с несколькими вхождениями и рассматривают входные данные как многострочную строку.

Метод match() возвращает массив errorLines, содержащий все записи журнала, соответствующие шаблону.

Наконец, мы выводим в консоль записи журнала с меткой “ERROR”. В выводе будут отображены только строки журнала с меткой “ERROR”.

Очистка данных

Чтобы обеспечить согласованность и удалить из текстовых данных нерелевантные символы или форматирование, очистка данных является важным шагом в предварительной обработке данных. Регулярные выражения, позволяющие эффективно преобразовывать данные на основе шаблонов, играют важную роль в этом процессе. Давайте рассмотрим реальный пример JavaScript очистки данных с помощью регулярных выражений.

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

const dataset = [
	'Продукт A - $99.99',
	'Продукт B: скидка 50%!',
	'Продукт C - *ограниченный запас*',
	'Продукт D (новое поступление)',
];

const cleanPattern = /[^a-zA-Z0-9\s]/g;
const cleanedData = dataset.map((description) => description.replace(cleanPattern, ''));

console.log('Очищенные данные:');
console.log(cleanedData);

Массив dataset в вышеупомянутом примере содержит примеры описаний товаров. Мы объявляем переменную cleanPattern как шаблон регулярного выражения, который соответствует любым символам, кроме буквбетические, цифровые и пробельные символы для очистки данных. Любой нежелательный специальный символ (любой символ, не являющийся алфавитно-цифровым) будет перехвачен шаблоном [^a-zA-Z0-9s].

Мы снова перебираем каждое описание, используя метод map() для массива ‘dataset’. Затем мы используем метод replace() и cleanPattern для замены нежелательных символов на пустую строку.

На выходе мы получим:


Очищенные данные:
[
"Продукт A 99.99",
"Продукт B 50 скидка",
"Продукт C ограниченный запас",
"Продукт D Новое поступление"
]

Заключение

[Регулярные выражения (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions) - это универсальный инструмент программирования для решения различных задач, таких как очистка данных, парсинг журналов, проверка и извлечение данных, поиск и замена. Они позволяют легко сопоставлять сложные шаблоны и обеспечивают гибкий и эффективный способ обработки текстовых операций.

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