只需编写脚本即可生成报告。 数据是通过Google表单提交的表单。收集电子邮件的形式以及其他数据。
所有电子邮件地址也是结构化的。 Firstname.Lastname@email-domain.co.uk
对于报告,我想要输入人名,而不是电子邮件。
这是我提出的,它确实有效,但我是谷歌的Javascript和脚本的新手。所以想要把事情做好,或者找出我出错的地方。我不想编写大量脚本并将它们组合在一起,发现它们需要太长时间才能获得太多数据并失败。
var cleanName = names[i].replace("@email-domain.co.uk","");
var cleanName = cleanName.replace("."," ");
var cleanName = cleanName.charAt(0).toUpperCase() + cleanName.slice(1);
var space = cleanName.search(" ");
var cleanName = cleanName.substr(0,space+1)+ cleanName.charAt(space+1).toUpperCase() + cleanName.slice(space+2);
我尝试了大约一个小时才能让它在没有空间变量的情况下工作。但就是做不到。 不是说这是最好的方法。
答案 0 :(得分:1)
更新了答案
我突然意识到你可以通过对数组使用.join
方法来进一步减少这一点:
var namePieces = names[i].replace(/@.+$/, "").split(".");
for (i=0; i<namePieces.length; i++) {
namePieces[i] = namePieces[i].replace(/^[a-z]/, function(match) {
return match.toUpperCase();
});
}
var cleanName = namePieces.join(" ");
。 。 。或者,如果要返回最后一行的cleanName
值,则可以使用:
return namePieces.join(" ");
这实际上只是将namePieces
数组中每个元素的第一个字母转换为大写,然后将join
所有更新的元素转换为一起,并用空格分隔每个元素。
原始答案
这是另一种方法。 。 。根据您的代码,您可以这样做:
var namePieces = names[i].replace(/@.+$/, "").split(".");
var cleanName = "";
for (i=0; i<namePieces.length; i++) {
cleanName += (i > 0) ? " " : "";
cleanName += namePieces[i].replace(/^[a-z]/, function(match) {
return match.toUpperCase();
});
}
现在,让我逐步完成代码。 。 。 :)
var namePieces = names[i].replace(/@.+$/, "").split(".");
这会获取当前的电子邮件地址,在@
之后删除所有内容,并在每次点击.
您的示例数据Firstname.Lastname@email-domain.co.uk
的结果将是此数组:["Firstname", "Lastname"]
之后,如果它不是cleanName
数组中的第一个元素,它会遍历数组中的每个项目并为现有namePieces
值添加一个空格:
cleanName += (i > 0) ? " " : "";
然后它取当前名称“piece”,如果它的第一个字符是小写字母,则将其替换为自身的大写版本,并将其添加到当前cleanName
值:
cleanName += namePieces[i].replace(/^[a-z]/, function(match) {
return match.toUpperCase();
});
关于这种方法需要注意两点:
/^./
)或更改正则表达式中可接受字符集此方法还会获取电子邮件地址中其他名称的变体形式。 。 。例如:
Firstname.M.Lastname@email-domain.co.uk
会导致Firstname M Lastname
Firstname.Lastname.Jr@email-domain.co.uk
会产生Firstname Lastname Jr
这样可以增加一些额外的灵活性。