Ряд методов объекта String могут использовать регулярные выражения в качестве параметра.
Для поиска всех соответствий в строке применяется метод 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 может использовать регулярные выражения для разделения строк. Например, разделим приложение по словам (а точнее по пробелам) с помощью метасимвола "\s":
const initialText = "Сегодня была прекрасная погода"; const exp = /\s/; const result = initialText.split(exp); result.forEach(value => console.log(value));
Вывод браузера:
Сегодня была прекрасная погода
Метод search находит индекс первого включения соответствия в строке:
const initialText = "hello world"; const exp = /wor/; const result = initialText.search(exp); console.log(result); // 6
Метод 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