Что такое строки и почему важна их обработка?
Строки в Google Apps Script представляют собой последовательности символов, используемые для хранения и обработки текста. Обработка строк играет ключевую роль в автоматизации задач, таких как анализ данных, генерация отчетов, обработка пользовательского ввода и взаимодействие с внешними API. Умение эффективно работать со строками позволяет создавать более гибкие и мощные скрипты.
Основные операции со строками: конкатенация, извлечение подстрок
Основные операции включают конкатенацию (объединение строк), извлечение подстрок (получение части строки), поиск и замену текста, преобразование регистра и другие. Эти операции являются фундаментальными для манипулирования текстовыми данными.
Типы строк в Google Apps Script: примитивы и объекты
В Google Apps Script строки могут быть представлены как примитивы (простые строковые значения) или как объекты String. Оба типа могут использоваться взаимозаменяемо в большинстве случаев, но важно понимать их различия, особенно при работе с методами и свойствами.
Базовые методы работы со строками
Определение длины строки: метод `length`
Метод length возвращает количество символов в строке.
/**
* Возвращает длину строки.
* @param {string} str Входная строка.
* @return {number} Длина строки.
*/
function getStringLength(str: string): number {
return str.length;
}
const myString: string = "Hello, world!";
const stringLength: number = getStringLength(myString); // 13
Logger.log(stringLength);Извлечение символов: метод `charAt()`
Метод charAt(index) возвращает символ, находящийся по указанному индексу. Индексация начинается с 0.
/**
* Возвращает символ по указанному индексу.
* @param {string} str Входная строка.
* @param {number} index Индекс символа.
* @return {string} Символ по индексу.
*/
function getCharacterAtIndex(str: string, index: number): string {
return str.charAt(index);
}
const myString: string = "Google";
const character: string = getCharacterAtIndex(myString, 0); // "G"
Logger.log(character);Поиск подстрок: методы `indexOf()`, `lastIndexOf()` и `includes()`
indexOf(substring) возвращает индекс первого вхождения подстроки. Если подстрока не найдена, возвращает -1.
lastIndexOf(substring) возвращает индекс последнего вхождения подстроки. Если подстрока не найдена, возвращает -1.
includes(substring) возвращает true, если строка содержит указанную подстроку, и false в противном случае.
/**
* Поиск индекса подстроки в строке.
* @param {string} str Входная строка.
* @param {string} substring Подстрока для поиска.
* @return {number} Индекс подстроки или -1, если не найдена.
*/
function findSubstringIndex(str: string, substring: string): number {
return str.indexOf(substring);
}
const myString: string = "This is a test string";
const index: number = findSubstringIndex(myString, "test"); // 10
Logger.log(index);
/**
* Проверяет, содержит ли строка указанную подстроку.
* @param {string} str Входная строка.
* @param {string} substring Подстрока для поиска.
* @return {boolean} True, если строка содержит подстроку, иначе false.
*/
function stringIncludesSubstring(str: string, substring: string): boolean {
return str.includes(substring);
}
const contains: boolean = stringIncludesSubstring(myString, "test"); // true
Logger.log(contains);Извлечение подстрок: методы `substring()`, `slice()` и `substr()`
substring(startIndex, endIndex) извлекает подстроку от startIndex (включительно) до endIndex (исключительно).
slice(startIndex, endIndex) аналогичен substring(), но может принимать отрицательные индексы (отсчет с конца строки).
substr(startIndex, length) извлекает подстроку, начинающуюся с startIndex и имеющую указанную length.
/**
* Извлекает подстроку из строки.
* @param {string} str Входная строка.
* @param {number} startIndex Индекс начала подстроки.
* @param {number} endIndex Индекс конца подстроки (не включительно).
* @return {string} Извлеченная подстрока.
*/
function extractSubstring(str: string, startIndex: number, endIndex: number): string {
return str.substring(startIndex, endIndex);
}
const myString: string = "Example string";
const substring: string = extractSubstring(myString, 0, 7); // "Example"
Logger.log(substring);Модификация строк: замена и преобразование регистра
Замена подстрок: метод `replace()` (простой и с регулярными выражениями)
Метод replace(searchValue, replaceValue) заменяет первое вхождение searchValue на replaceValue. Для замены всех вхождений можно использовать регулярные выражения с флагом g.
/**
* Заменяет подстроку в строке.
* @param {string} str Входная строка.
* @param {string} searchValue Подстрока для замены.
* @param {string} replaceValue Новая подстрока.
* @return {string} Строка с замененной подстрокой.
*/
function replaceSubstring(str: string, searchValue: string, replaceValue: string): string {
return str.replace(searchValue, replaceValue);
}
const myString: string = "This is a test string test";
const replacedString: string = replaceSubstring(myString, "test", "example"); // "This is a example string test"
Logger.log(replacedString);
/**
* Заменяет все вхождения подстроки в строке с использованием регулярного выражения.
* @param {string} str Входная строка.
* @param {string} searchValue Подстрока для замены.
* @param {string} replaceValue Новая подстрока.
* @return {string} Строка со всеми замененными подстроками.
*/
function replaceAllSubstrings(str: string, searchValue: string, replaceValue: string): string {
const regex = new RegExp(searchValue, 'g');
return str.replace(regex, replaceValue);
}
const replacedAllString: string = replaceAllSubstrings(myString, "test", "example"); // "This is a example string example"
Logger.log(replaceAllString);Преобразование регистра: методы `toUpperCase()` и `toLowerCase()`
toUpperCase() преобразует строку в верхний регистр.
toLowerCase() преобразует строку в нижний регистр.
/**
* Преобразует строку в верхний регистр.
* @param {string} str Входная строка.
* @return {string} Строка в верхнем регистре.
*/
function convertToUpperCase(str: string): string {
return str.toUpperCase();
}
const myString: string = "Hello";
const upperCaseString: string = convertToUpperCase(myString); // "HELLO"
Logger.log(upperCaseString);Удаление пробелов: метод `trim()`
Метод trim() удаляет пробелы в начале и конце строки.
/**
* Удаляет пробелы в начале и конце строки.
* @param {string} str Входная строка.
* @return {string} Строка без пробелов в начале и конце.
*/
function trimString(str: string): string {
return str.trim();
}
const myString: string = " Hello world! ";
const trimmedString: string = trimString(myString); // "Hello world!"
Logger.log(trimmedString);Работа с регулярными выражениями для сложных операций
Основы регулярных выражений: символы, классы, квантификаторы
Регулярные выражения (regex) — это мощный инструмент для поиска и манипулирования текстом. Они позволяют описывать шаблоны, которым должен соответствовать текст. Основные элементы:
Символы: . (любой символ), \[] (набор символов), \d (цифра), \w (буква, цифра, подчеркивание), \s (пробельный символ).
Классы: [a-z] (любая строчная буква), [0-9] (любая цифра).
Квантификаторы: * (0 или более раз), + (1 или более раз), ? (0 или 1 раз), {n} (ровно n раз), {n,} (n или более раз), {n,m} (от n до m раз).
Использование регулярных выражений в методах `match()`, `search()` и `replace()`
match(regex) возвращает массив совпадений с регулярным выражением.
search(regex) возвращает индекс первого совпадения или -1, если совпадений нет.
replace(regex, replaceValue) заменяет все совпадения с регулярным выражением на replaceValue.
Примеры использования: проверка формата email, извлечение данных из текста
/**
* Проверяет формат email с помощью регулярного выражения.
* @param {string} email Email для проверки.
* @return {boolean} True, если email соответствует формату, иначе false.
*/
function validateEmail(email: string): boolean {
const emailRegex: RegExp = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
return emailRegex.test(email);
}
const email: string = "test@example.com";
const isValidEmail: boolean = validateEmail(email); // true
Logger.log(isValidEmail);
/**
* Извлекает все числа из строки с помощью регулярного выражения.
* @param {string} str Входная строка.
* @return {Array | null} Массив найденных чисел или null, если ничего не найдено.
*/
function extractNumbers(str: string): Array | null {
const numberRegex: RegExp = /\d+/g;
return str.match(numberRegex);
}
const text: string = "There are 123 apples and 456 oranges.";
const numbers: Array | null = extractNumbers(text); // ["123", "456"]
Logger.log(numbers);Продвинутые техники и оптимизация
Форматирование строк: использование шаблонов и `Utilities.formatString()`
Utilities.formatString() позволяет форматировать строки, подставляя значения в шаблоны.
/**
* Форматирует строку с использованием Utilities.formatString().
* @param {string} template Шаблон строки.
* @param {...any} args Аргументы для подстановки в шаблон.
* @return {string} Отформатированная строка.
*/
function formatString(template: string, ...args: any[]): string {
return Utilities.formatString(template, ...args);
}
const name: string = "John";
const age: number = 30;
const formattedString: string = formatString("My name is %s and I am %s years old.", name, age); // "My name is John and I am 30 years old."
Logger.log(formattedString);Разбиение строк на массивы: метод `split()`
Метод split(separator) разбивает строку на массив подстрок, используя указанный разделитель.
/**
* Разбивает строку на массив подстрок по разделителю.
* @param {string} str Входная строка.
* @param {string} separator Разделитель.
* @return {Array} Массив подстрок.
*/
function splitString(str: string, separator: string): string[] {
return str.split(separator);
}
const csvString: string = "apple,banana,orange";
const fruits: string[] = splitString(csvString, ","); // ["apple", "banana", "orange"]
Logger.log(fruits);Соединение массивов в строки: метод `join()`
Метод join(separator) объединяет элементы массива в строку, используя указанный разделитель.
/**
* Объединяет массив строк в одну строку с разделителем.
* @param {Array} arr Массив строк.
* @param {string} separator Разделитель.
* @return {string} Объединенная строка.
*/
function joinArray(arr: string[], separator: string): string {
return arr.join(separator);
}
const fruitArray: string[] = ["apple", "banana", "orange"];
const joinedString: string = joinArray(fruitArray, ", "); // "apple, banana, orange"
Logger.log(joinedString);Оптимизация производительности при работе с большими объемами текста
При работе с большими объемами текста важно учитывать производительность. Использование регулярных выражений может быть ресурсоемким. Рассмотрите возможность использования встроенных методов строк, когда это возможно. Также, избегайте многократного конкатенирования строк в цикле, вместо этого используйте массивы для накопления данных и метод join() для создания итоговой строки.