在第一个空格出现时拆分字符串

IT技术 javascript regex string
2021-03-08 23:52:03

我没有得到一个优化的正则表达式,它把我分成一个基于第一个空白出现的字符串:

var str="72 tocirah sneab";

我需要得到:

[
    "72",
    "tocirah sneab",
]
6个回答

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

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()返回-1slice(). (它将截断字符串的最后一个字符。)就个人而言,我喜欢@georg 答案末尾的正则表达式后视解决方案,但这不适用于非常旧的浏览器,因此请注意这一点。

问题问的是“空白”而不是空间,所以我不确定为什么这会得到这么多赞成票?
2021-04-26 23:52:03
@MitraArdron 人们倾向于支持他们认为有帮助的答案。答案的第一句中提到了这个答案只占空格而不是其他空格字符的事实。由于原始海报接受了答案,因此他们似乎打算将“空格”表示为“空格字符”而不是“任何空格字符”。综上所述,发布答案(或编辑以添加到现有答案)以解决所有空白是一项富有成效且受欢迎的事情。
2021-05-05 23:52:03

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)

str.match(/^(\S+)\s(.*)/).slice(1) 不适用于没有空格的字符串
2021-04-29 23:52:03

在 ES6 中你也可以

let [first, ...second] = str.split(" ")
second = second.join(" ")
我非常喜欢这个,它运行良好,但性能方面,对于最受好评的“子字符串”解决方案来说非常糟糕。刚刚测试了它,它大约慢了 10 倍。
2021-04-20 23:52:03
它不回答指定“空白”而不是空格的问题。
2021-04-26 23:52:03

我知道比赛已经晚了,但似乎有一种非常简单的方法可以做到这一点:

const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);

这将arr[0]"72"arr[1]一起离开"tocirah sneab"请注意, arr[2] 将为空,但您可以忽略它。

以供参考:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split#Capturing_parentheses

请注意,这会生成最后一个空白元素。
2021-05-15 23:52:03
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"];

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