javascript在空格时分裂,但并非总是如此

时间:2013-07-12 05:23:31

标签: javascript jquery

我有一个文本区域和一个函数,它根据内容元素之间的空格分割粘贴的内容,并逐个将它们变成标签:

说我要粘贴以下内容:

1234,john smith,john@test.com 4312,jack gold,jack@yahoo.com 5678,Brian,brian@gmail.com

显然我用

$('#testArea').on("paste", ".maininput", function (event) {
     var text = $(element).val();
     var contentArray = text.split(" ");
}

结果应为3个标签,格式如下(用户手机号码,全名,电子邮件)

但是由于firstname和lastname之间有空格这一事实我无法得​​到正确的结果。

我想要实现的是当它在名字和姓氏之间时避开空格。

有谁知道怎么做?

5 个答案:

答案 0 :(得分:4)

不要在空格上分开。而是扫描你想要的东西:

var s = "1234,john smith,john@test.com 4312,jack gold,jack@yahoo.com 5678,Brian,brian@gmail.com"
var lines = s.match(/\S[^,]+,[^,]+,[^ ]+/g)
for (var i=lines.length;i--;){
  console.log(lines[i].split(','));
}
// ["5678", "Brian", "brian@gmail.com"]
// ["4312", "jack gold", "jack@yahoo.com"]
// ["1234", "john smith", "john@test.com"]

正则表达式说:

  • 查找空白以外的内容
  • 后跟一个或多个不是逗号的内容
    • 后跟逗号
  • 后跟一个或多个不是逗号的内容
    • 后跟逗号
  • 后面跟着一个或多个不是空格的东西

答案 1 :(得分:1)

最好使用正则表达式来匹配模式。

var str = "1234,john smith,john@test.com 4312,jack gold,jack@yahoo.com 5678,Brian,brian@gmail.co";
var matchGroups = str.match(/([^,]*,[^,]*,[^ ]*)/g);  //look for pattern "XXX,XXX,XXX" followed by whitespace or end of line
console.log(matchGroups);

//Now work with the sections
for( var i=0;i<matchGroups.length;i++){
    var parts = matchGroups[i].split(",");  //split it into your parts on commas
    console.log(parts);
}

JSFiddle

答案 2 :(得分:0)

例如,将<space><digit>替换为|<digit>,然后拆分为|

text.replace(/ (\d)/g, "|$1").split("|")

示例:

"1234,john smith,john@test.com 4312,jack gold,jack@yahoo.com 5678,Brian,brian@gmail.com".replace(/ (\d)/g, "|$1").split("|")

["1234,john smith,john@test.com",
 "4312,jack gold,jack@yahoo.com",
 "5678,Brian,brian@gmail.com"]

答案 3 :(得分:0)

您可以运行for循环来检查空间的下一个字符,并根据它可以用&nbsp;替换空格或保留原样。我的意思是如果下一个字符是一个数字,你可以简单地保留空格,如果它是一个字母更改空间&nbsp;

答案 4 :(得分:0)

jQuery( window ).load(function() {
            jQuery("#FullNametest").change(function(){
                var temp = jQuery(this).val();
                var fullname = temp.split(" ");
                var firsname='';
                var middlename='';
                var lastname = '';
                firstname=fullname[0];
                lastname=fullname[fullname.length-1];

                for(var i=1; i < fullname.length-1; i++) 
                {
                   middlename =  middlename +" "+ fullname[i];
                }
                jQuery('#FirstName').val(firstname);
                jQuery('#middlename').val(middlename);
                jQuery('#LastName').val(lastname);
            });
        });