在javascript中的空格后获取一个变量中的所有字符串

时间:2016-11-24 11:14:34

标签: javascript

我正在做什么

例如我有一个名字

 var nameofuser = 'John Constantine vayo';
    var values = nameofuser.split(" ");
    var f_name = values[0];
    var l_name = nameofuser.substr(nameofuser.indexOf(' ') + 1);
    console.log(f_name);
    console.log(l_name);

当用户输入他的姓氏和其他标题等时它工作正常,它全部进入l_name但是当用户只输入名字时只有'John',那么l_name也会填充'john':( ,

我想要IF用户输入姓氏等等,那么只应填充l_name。

如果用户只键入名字,则只填充带名字的f_name

8 个答案:

答案 0 :(得分:2)

var nameofuser = 'John Constantine vayo';
var values = nameofuser.split(" ");
var f_name = values[0];
var l_name = values[1] ? nameofuser.substr(nameofuser.indexOf(' ') + 1) : '';
console.log(f_name);
console.log(l_name);

答案 1 :(得分:1)

正则表达式是此类分解的常用工具:

var nameofuser = str.match(/^\s*(\S+)\s*(.*?)\s*$/).slice(1);

'John Constantine vayo'提供["John", "Constantine vayo"]

'John'给出了["John"]

但要小心这种猜测。在多元文化的世界中,只需拿走用户提供的东西就更安全。

答案 2 :(得分:1)

当在字符串上搜索没有空格-1的空格时,将返回。因此-1 + 1将被计算为0,子字符串将返回整个字符串。

var nameofuser = 'John Constantine vayo';
var values = nameofuser.split(" ");
var f_name = values.shift();
var l_name = values.length ? values.join(" ") : undefined;
console.log(f_name);
console.log(l_name);

答案 3 :(得分:0)

这是因为你必须确保该行有多个单词:

  

var l_name = nameofuser.substr(nameofuser.indexOf(' ') + 1);

您的代码应如下所示:

var nameofuser = 'John Constantine vayo';
var values = nameofuser.split(" ");
var f_name = values[0];
var l_name = (values.length > 1) ? nameofuser.substr(nameofuser.indexOf(' ') + 1) : '';
console.log(f_name);
console.log(l_name);

答案 4 :(得分:0)

执行.indexOf()时,如果值不匹配,您的索引将为-1,因此indexOf() + 1会将其解释为-1 + 1 = 0。所以你最终会做namesofuser.substring(0)

尝试这样的事情:

string.split + array.shift和array.join



function getNames(str) {
  var values = str.split(" ");
  var f_name = values.shift();
  var l_name = values.join(' ');
  console.log(f_name);
  console.log(l_name);
}

getNames('John Constantine vayo')
getNames("Foo")




string.substring



function getNames(str) {
  var index = str.indexOf(' ');
  index = index > -1 ? index : str.length;
  var f_name = str.substring(0, index);
  var l_name = str.substring(index + 1);
  console.log(f_name);
  console.log(l_name);
}

getNames('John Constantine vayo')
getNames("Foo")




答案 5 :(得分:0)

只检查values数组中是否有多个单词? 希望这会有所帮助:)

var values = nameofuser.split(" ");
var f_name = values[0];
if (values.lenght >= 2) {
  var l_name = nameofuser.substr(nameofuser.indexOf(' ') + 1);
} else { //let lastname empty or do something else}

  console.log(f_name);
  console.log(l_name);
}

答案 6 :(得分:0)



nontrivial-square-root?




答案 7 :(得分:0)

这也有效,并解决了nameofuser以空格开头时您遇到的问题

var nameofuser = 'John Constantine vayo';
var values = nameofuser.trim().split(" ");
var f_name = values[0];
var l_name = values.slice(1).join(" ")
console.log(f_name);
console.log(l_name);