Регулярные выражения в методах String

Последнее обновление: 27.10.2023

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

Метод match

Для поиска всех соответствий в строке применяется метод match():

const initialText = "Он пришел домой и сделал домашнюю работу";
const exp = /дом[а-я]*/gi;
const result = initialText.match(exp);
result.forEach(value => console.log(value));
// или так
// console.log(result[0]);
// console.log(result[1]);

Символ звездочки указывает на возможность наличия после строки "дом" неопределенного количества символов от а до я. В итоге в массиве result окажутся следующие слова:

домой
домашнюю

С одной стороны, этот метод похож на метод exec() объекта RegExp за тем исключением, что exec() возвращает только первое вхождение:

const initialText = "Он пришел домой и сделал домашнюю работу";
const exp = /дом[а-я]*/gi;
const result2 = exp.exec(initialText);
result2.forEach(value => console.log(value));

Консольный вывод браузера:

домой

Разделение строки. Метод split

Метод split может использовать регулярные выражения для разделения строк. Например, разделим приложение по словам (а точнее по пробелам) с помощью метасимвола "\s":

const initialText = "Сегодня была прекрасная погода";
const exp = /\s/;
const result = initialText.split(exp);
result.forEach(value => console.log(value));

Вывод браузера:

Сегодня
была
прекрасная
погода

Поиск в строке. Метод search

Метод search находит индекс первого включения соответствия в строке:

const initialText = "hello world";
const exp = /wor/;
const result = initialText.search(exp);
console.log(result); // 6

Замена. Методы replace

Метод replace позволяет заменить все соответствия регулярному выражению определенной строкой. Первый параметр метода - регулярное выражение, а второй - на что заменяем совпадения. Пример замены:

let menu = "Завтрак: каша, чай. Обед: суп, чай. Ужин: салат, чай.";
const exp = /чай/gi;
menu = menu.replace(exp, "кофе");
console.log(menu);

Вывод браузера:

Завтрак: каша, кофе. Обед: суп, кофе. Ужин: салат, кофе.

Другая форма метода в качестве второго параметра принимает функцию замены. Эта функция принимает соответствие регулярному выражению и возвращает строку, на которое заменяется соответствие. Например, заменим чай на кофе только для завтрака:

let menu = "Завтрак: каша, чай. Обед: суп, чай. Ужин: салат, чай.";
const exp = /чай/gi;
let i = 0;
menu = menu.replace(exp, function(tee){
    if(i++ == 0) return "кофе";
    else return tee;
});
console.log(menu);  // Завтрак: каша, кофе. Обед: суп, чай. Ужин: салат, чай.

Для индикатора замены используем счетчик - переменную i. Если она равна 0, то производим замену. В остальных случаях возвращаем соответствие - строку "чай".

Более сложный случай. Пусть у нас есть следующий текст:

Publication Date: 2021-09-06
Updated on: 2021-09-14

Здесь у нас применяются даты в формате yyyy-MM-dd. Допустим, нам надо изменить формат дат на "dd.MM.yyyy". Для этого определим следующую программу:

const exp = /\d{4}-\d{2}-\d{2}/g;
let text = "Publication Date: 2021-09-06\nUpdated on: 2021-09-14"

text = text.replace(exp, function(date){
    const arr = date.split("-");
    return `${arr[2]}.${arr[1]}.${arr[0]}`;
});
console.log(text);

Здесь мы извлекаем все соответствия регулярному выражению /\d{4}-\d{2}-\d{2}/g. В методе replace в функции обратного вызова получаем соответствие через параметр date, с помощью функции split() разбиваем его на три части по разделителю-дефису:

const arr = date.split("-");

То есть у нас получаем массив из трех компонентов даты. И затем возвращаем дату в другом формате:

return `${arr[2]}.${arr[1]}.${arr[0]}`;

В итоге мы получим текст:

Publication Date: 06.09.2021
Updated on: 14.09.2021
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850