我没有得到一个优化的正则表达式,它把我分成一个基于第一个空白出现的字符串:
var str="72 tocirah sneab";
我需要得到:
[
"72",
"tocirah sneab",
]
我没有得到一个优化的正则表达式,它把我分成一个基于第一个空白出现的字符串:
var str="72 tocirah sneab";
我需要得到:
[
"72",
"tocirah sneab",
]
如果您只关心空格字符(而不是制表符或其他空白字符)并且只关心第一个空格之前的所有内容和第一个空格之后的所有内容,则可以不使用正则表达式,如下所示:
str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"
请注意,如果根本没有空格,则第一行将返回一个空字符串,第二行将返回整个字符串。确保这是您在那种情况下想要的行为(或者那种情况不会出现)。
有点迂腐的更新:尽管它在所有浏览器以及 Node.js、deno 等中都得到有效支持,但从String.prototype.substr()
未被规范地添加到 ECMAScript 规范中。实际上,这不太可能影响您。但是,如果它困扰您(或者如果您在某些资源受限的环境中运行,而String.prototype.substr()
由于某种原因而没有),您可以使用人们在此问题上提供的许多其他很好的答案之一。String.prototype.slice()
是一个很好的替代品,但要注意如果第二个参数indexOf()
返回-1
到slice()
. (它将截断字符串的最后一个字符。)就个人而言,我喜欢@georg 答案末尾的正则表达式后视解决方案,但这不适用于非常旧的浏览器,因此请注意这一点。
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:
str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)
在 ES6 中你也可以
let [first, ...second] = str.split(" ")
second = second.join(" ")
我知道比赛已经晚了,但似乎有一种非常简单的方法可以做到这一点:
const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);
这将arr[0]
与"72"
和arr[1]
一起离开"tocirah sneab"
。请注意, arr[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"];
但我仍然认为有更快的方法。