在第一次出现的空白处分割字符串

我没有得到一个优化的regex,它将一个字符串分割到第一个空白处:

var str="72 tocirah sneab";

我需要得到:

[
    "72",
    "tocirah sneab",
]
解决办法

如果你只关心空格字符(而不是制表符或其他空白字符),并且只关心第一个空格之前的所有内容和第一个空格之后的所有内容,你可以不用像这样的正则表达式来做:

str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"

注意,如果完全没有空格,那么第一行将返回一个空字符串,第二行将返回整个字符串。 请确定这是你在这种情况下想要的行为(或者这种情况不会出现)。

评论(2)

Javascript不支持lookbehinds,所以split是不可能的。`match'可以工作:

str.match(/^(\S+)\s(.*)/).slice(1)

另一个技巧:

str.replace(/\s+/, '\x01').split('\x01')

怎么样

[str.replace(/\s.*/, ''), str.replace(/\S+\s/, '')]

以及为什么不

reverse = function (s) { return s.split('').reverse().join('') }
reverse(str).split(/\s(?=\S+$)/).reverse().map(reverse)

或者是

re = /^\S+\s|.*/g;
[].concat.call(re.exec(str), re.exec(str))

2019年更新:从ES2018开始,支持lookbehinds:

评论(2)
var arr = [];             //new storage
str = str.split(' ');     //split by spaces
arr.push(str.shift());    //add the number
arr.push(str.join(' '));  //and the rest of the string

//arr is now:
["72","tocirah sneab"];

但我仍然认为有一种更快的方法。

评论(0)