使用JavaScript在特殊字符处拆分字符串

7
我正在尝试“智能”地预填表单,我想根据用户的电子邮件地址预填写名字和姓氏输入框,例如:

jon.doe@email.com 返回 Jon Doe
jon_doe@email.com 返回 Jon Doe
jon-doe@email.com 返回 Jon Doe

我已经成功获取了@符号前面的字符串,

var email = letters.substr(0, letters.indexOf('@'));

但是我不知道如何在分隔符可以是多个值的情况下使用split()函数,我可以做到这一点:

email.split("_")

但如何在其他有效的电子邮件地址特殊字符上进行拆分?

什么是“特殊字符”?请注意,所有字符都在电子邮件地址中有效。 - Bergi
8个回答

17

JavaScript的字符串split方法 可以接受正则表达式。

例如,下面的代码可以将字符串按.-_进行分割。

"i-am_john.doe".split(/[.\-_]/)

返回以下内容。

["i", "am", "john", "doe"]

4
你可以使用正则表达式来分割你想要的内容。例如,你可以按不是字母的任何字符进行分割:
var parts = email.split(/[^A-Za-z]/);

Demo: http://jsfiddle.net/Guffa/xt3Lb9e6/


1
正则表达式 --
email.split(/[_\.-]/)

这个正则表达式匹配并分割任何一个字符集(由[]表示)中的 _, . 或 -。以下是一个学习正则表达式的好资源:http://qntm.org/files/re/re.html

1
你应该提供更多关于你的答案的解释。 - Cfreak

1
你可以使用正则表达式来拆分字符串。为了匹配._-,你可以使用字符类,例如[.\-_]。JavaScript中正则表达式的语法是/expression/,因此你的示例将如下所示:
email.split(/[\.\-_]/);

请注意,反斜杠是为了防止.-被解释为特殊字符。 .是一个表示任何字符的特殊字符类。在字符类中,-可用于指定范围,例如[a-z]
如果需要动态列表中的字符来拆分,请使用RegExp构造函数构建正则表达式。例如:
var specialChars = ['.', '\\-', '_'];
var specialRegex = new RegExp('[' + specialChars.join('') + ']');
email.split(specialRegex);

在JavaScript中有关正则表达式的更多信息可以在MDN上找到。


0

你可以使用正则表达式来实现,只需在方括号中提供字符列表并在必要时进行转义。

email.split("[_-\.]");

你是指这个意思吗?


如果您想传递一个正则表达式,它不能是字符串字面量。split("[_-\.]");将在完整的序列[_-\.]上进行拆分。 - furydevoid

0

你说得对,你需要使用split函数

Split函数通过接受一个参数来拆分字符串。可以通过正则表达式拆分多个值。对于你的用途,尝试使用以下代码:

var re = /[\._\-]/;
var split = email.split(re, 2);

这应该会返回一个包含两个值,名字的数组。第二个参数是返回的元素数量。


0
我创建了一个 jsFiddle 来展示如何完成这个操作:
function printName(email){
    var name = email.split('@')[0];
    // source : https://dev59.com/VHRB5IYBdhLWcg3wWGEH
    var returnVal = name.split(/[._-]/g);
    return returnVal;
}

http://jsfiddle.net/ts6nx9tt/1/


0
如果你定义了分隔符,下面的代码可以为你返回所有的替代选项。
var arr = ["_",".","-"];

var email = letters.substr(0, letters.indexOf('@'));
arr.map(function(val,index,rest){
   var r = email.split(val);
   if(r.length > 1){
     return r.join(' ');
   }
   return "";
}
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接