Иногда возникает необходимость не просто проверить строку на соответствие регулярному выражению, но и извлечь определенные части этой строки. В регулярных выражениях для этого используются так называемые «группы».
Пример
Рассмотрим пример. Пусть есть строка, которая представляет собой некую информацию о формате:
var myString = "something format_abc";
И хочется извлечь часть этой строки, которая идет после format_
. Для этого можно использовать регулярное выражение с группой:
var arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString);
Здесь (.*?)
— это и есть группа, которую мы хотим извлечь. Результат применения этого регулярного выражения будет массив, где нулевой элемент — это вся подстрока, соответствующая регулярному выражению, а элементы с индексами, начиная с 1, — это извлеченные группы.
console.log(arr); // Выводит: [" format_abc", "abc"]
Тут arr[0]
— это " format_abc"
, а arr[1]
— это "abc"
.
Внимание на спецсимволы
Однако, при работе с регулярными выражениями важно помнить о специфике языка. В частности, в JavaScript некоторые символы в строках имеют специальное значение. Например, символ %
в строке, передаваемой в console.log
, интерпретируется как место для подстановки значения.
Поэтому, если в извлеченной группе окажется символ %
, то при выводе в консоль может возникнуть ситуация, когда вместо ожидаемого значения будет выведено undefined
.
var myString = "date format_%A"; var arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString); console.log(arr[1]); // Выводит: undefined
Чтобы избежать такой ситуации, можно использовать метод String.prototype.replace()
для замены специфических символов на их escape-последовательности.
Добавить комментарий