Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Группы. Регулярные выражения
Если необходимо получить содержимое без тегов, то нужный фрагмент внутри шаблона следует разместить внутри круглых скобок:
let p = /<b>(.*?)<\/b>/gi;
let str = '<b>Text1</b>Text2<b>Text3</b>';
let arr;
while ( (arr = p.exec(str)) ) {
console.log(arr);
}
/* [
'<b>Text1</b>',
'Text1',
index: 0,
input: '<b>Text1</b>Text2<b>Text3</b>',
groups: undefined
]
[
'<b>Text3</b>',
'Text3',
index: 17,
input: '<b>Text1</b>Text2<b>Text3</b>',
groups: undefined
] */
Результат будет доступен через элемент массива с индексом, совпадающем с порядковым номером круглых скобок внутри шаблона (нумерация начинается с единицы). Элемент массива с индексом 0
будет содержать фрагмент, полностью совпадающий с шаблоном.
Круглые скобки часто используются для группировки фрагментов внутри шаблона. В этих случаях не требуется чтобы фрагмент запоминался и был доступен в результатах поиска. Пример:
let p = /[a-z]+((st)|(xt))/gi;
let str = 'test text';
let arr;
while ( (arr = p.exec(str)) ) {
console.log(arr);
}
/* [
'test',
'st',
'st',
undefined,
index: 0,
input: 'test text',
groups: undefined
]
[
'text',
'xt',
undefined,
'xt',
index: 5,
input: 'test text',
groups: undefined
] */
Три последних элемента в этом примере являются лишними. Чтобы избежать захвата фрагмента после открывающей круглой скобки следует разместить символы ?:
.
let p = /[a-z]+(?:(?:st)|(?:xt))/gi;
let str = 'test text';
let arr;
while ( (arr = p.exec(str)) ) {
console.log(arr);
}
/*
[ 'test', index: 0, input: 'test text', groups: undefined ]
[ 'text', index: 5, input: 'test text', groups: undefined ]
*/
В качестве примера использования групп разберем E-mail (листинг 8.3) и URL-адрес (листинг 8.4) на составные части.
Листинг 8.3. Разбор E-mail на составные части
let p = /^([a-z0-9_.-]+)@((?:[a-z0-9-]+\.)+[a-z]{2,6})$/i;
let str = 'user@mail.ru';
let arr = p.exec(str);
if (arr) {
console.log(arr);
console.log('Имя ящика - ' + arr[1]);
console.log('Имя сайта - ' + arr[2]);
console.log('Полный E-mail - ' + arr[0]);
}
else {
console.log('E-mail не соответствует шаблону');
}
В итоге получим следующий результат:
[
'user@mail.ru',
'user',
'mail.ru',
index: 0,
input: 'user@mail.ru',
groups: undefined
]
Имя ящика - user
Имя сайта - mail.ru
Полный E-mail - user@mail.ru
Листинг 8.4. Разбор URL-адреса на составные части
let s = '^(\\w+://)' +
'((?:[a-z0-9-]+\\.)+[a-z]{2,6})' +
'([a-z0-9/-]*/)*' +
'([a-z0-9-]+\\.[a-z]+)$';
let p = new RegExp(s, 'i');
let str = 'http://www.mysite.ru/folder1/folder2/forder3/file.html';
let arr = p.exec(str);
if (arr) {
console.log('Протокол - ' + arr[1]);
console.log('Сайт - ' + arr[2]);
console.log('Путь - ' + arr[3]);
console.log('Имя файла - ' + arr[4]);
}
else {
console.log('URL не соответствует шаблону');
}
В итоге получим следующий результат:
Протокол - http://
Сайт - www.mysite.ru
Путь - /folder1/folder2/forder3/
Имя файла - file.html
Для получения фрагментов можно также воспользоваться статическими свойствами $1 … $N
, а для получения полного соответствия свойством lastMatch
. Эти свойства не входят в стандарт, но доступны во всех Web-браузерах и в Node.js:
console.log('Полный URL - ' + RegExp.lastMatch);
console.log('Протокол - ' + RegExp.$1);
console.log('Сайт - ' + RegExp.$2);
console.log('Путь - ' + RegExp.$3);
console.log('Имя файла - ' + RegExp.$4);
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов