#javascript #google-apps-script #google-sheets
Вопрос:
Я хотел бы получить некоторую помощь в том, как перечислить элемент массива с электронными письмами в качестве элементов (и динамической длины) при извлечении фамилий. Я не совсем уверен в правильном коде, но у меня есть общее представление о том, как это сделать. Вот пример кода:
var arrayEmail = [john.doe@gmail.com, jane.clark@gmail.com];
var regTest =new RegExp(/.(w )@/);
var newArray = arrayEmail.map(function(e) {'• ' regTest.exec(value)});
var namesList = newArray.join('n');
Logger.log(namesList);
Я знаю, что код не включает заглавную букву, так как я еще не знаком с этим. Мой предполагаемый результат будет текстовой переменной и будет выглядеть так.
• Doe
• Clark
Или список с пронумерованными элементами (хотя я также не знаком с тем, как добавлять увеличивающиеся числа с помощью массивов с динамическими размерами).
1. Doe
2. Clark
Комментарии:
1. Будет ли электронное письмо всегда содержать
.
разделитель имени и фамилии?
Ответ №1:
Попробуйте это:
function moot() {
const array = ['john.doe@gmail.com', 'jane.clark@gmail.com'];
const lastnames = array
.map(email =>
String(email)
.replace(/^w ./, '')
.replace(/@. $/, ''))
.filter(String);
const result = lastnames
.map(name => name[0].toUpperCase() name.slice(1))
.map((name, index) => (index 1) '. ' name)
.join('n');
console.log(result);
}
Непонятно, зачем вам нужно было бы делать это в сценарии приложений, когда, вероятно, было бы намного проще с простой формулой ванильной таблицы regexreplace()
с использованием proper()
и.
Комментарии:
1. Почему ^w используется для записи имени в электронном письме? Когда я протестировал код, удаление символа ^ в замене кода(/^w ./, «) дало те же результаты. Также переменная «email» и «имя», как я полагаю, обозначает элемент массива? Не нужно ли объявлять переменные при использовании встроенных функций?
2. Кроме того, поскольку я не могу отредактировать комментарий, почему строка используется в фильтре(Строка). Разве метод filter() не принимает элементы или функции в качестве аргумента?
3. Это
^
означает начало текстовой строки. Он используется здесь для защиты от текстовых строк, которые не начинаются с буквы или цифры, т. е. не являются адресами электронной почты.name
обозначьте параметр элемента двух встроенных функций, и они не требуют объявлений.filter(String)
Шаблон отсеивает текстовые строки нулевой длины.
Ответ №2:
Посмотрим, поможет ли это
function listNames () {
const arrayEmail = ["john.doe@gmail.com", "jane.clark@gmail.com"];
const namesList = arrayEmail.map( e => "• " toTitleCase(e.split("@")[0].split(".")[1])).join("n");
Logger.log(namesList);
}
function toTitleCase(str) {
return str.replace(/wS*/g, function (txt) {
return txt.charAt(0).toUpperCase() txt.substr(1).toLowerCase();
});
}
Комментарии:
1. Привет. Может возникнуть вопрос, для чего это g в шаблоне регулярного выражения /wS*/g. Это для g в gmail? Я думал, что шаблоны регулярных выражений в скрипте приложения Google обозначаются / (как в /RegExp/), поэтому, в моем понимании, это выходит за рамки регулярного выражения.
2. Модификатор » g » используется для выполнения глобального сопоставления (поиска всех совпадений, а не остановки после первого совпадения).