重新格式化电子邮件地址。资本化名字和姓氏。删除域名。有没有更好的办法?

时间:2014-02-05 20:04:49

标签: javascript google-apps-script google-sheets google-docs

只需编写脚本即可生成报告。 数据是通过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);

我尝试了大约一个小时才能让它在没有空间变量的情况下工作。但就是做不到。 不是说这是最好的方法。

1 个答案:

答案 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();
});

关于这种方法需要注意两点:

  1. 如果它不是一个小写字母,它可以跳过替换,以获得一点额外的速度。如果您需要考虑非字母字符(其他语言,符号,数字),则必须将此正则表达式更改为接受任何字符(即/^./)或更改正则表达式中可接受字符集
  2. 此方法还会获取电子邮件地址中其他名称的变体形式。 。 。例如:

    Firstname.M.Lastname@email-domain.co.uk会导致Firstname M Lastname Firstname.Lastname.Jr@email-domain.co.uk会产生Firstname Lastname Jr

    这样可以增加一些额外的灵活性。