在第一个空白处出现分割string

我没有得到一个优化的正则expression式,我分裂成一个string基于第一个白色空间发生:

var str="72 tocirah sneab"; 

我需要得到:

 72 tocirah sneab 

如果您只关心空格字符(而不是制表符或其他空白字符),只关心第一个空格之前的所有内容以及第一个空格之后的所有内容,则可以不使用正则expression式这样做:

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

请注意,如果根本没有空格,则第一行将返回一个空string,第二行将返回整个string。 确保这种情况下你想要的行为(或者那种情况不会发生)。

Javascript不支持向后看,所以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)) 
 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"]; 

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

在ES6中,你也可以

 let [first, ...second] = str.split(" ") second = second.join(" ") 

您也可以使用.replace来replace第一个出现的地方,

 ​str = str.replace(' ','<br />'); 

离开/ g。

DEMO

只需将string拆分成一个数组,然后将需要的部分粘合在一起。 这种方法非常灵活,在很多情况下都很有效,很容易推理。 另外你只需要一个函数调用。

 arr = str.split(' '); // ["72", "tocirah", "sneab"] strA = arr[0]; // "72" strB = arr[1] + ' ' + arr[2]; // "tocirah sneab" 

或者,如果你想直接从string中挑选你需要的东西,你可以这样做:

 strA = str.split(' ')[0]; // "72"; strB = str.slice(strA.length + 1); // "tocirah sneab" 

或者像这样:

 strA = str.split(' ')[0]; // "72"; strB = str.split(' ').splice(1).join(' '); // "tocirah sneab" 

不过,我build议第一个例子。

工作演示: jsbin

georg的解决scheme很好,但如果string不包含任何空格,则会中断。 如果您的string有可能不包含空格,那么使用.split和捕获组是比较安全的。

 str_1 = str.split(/\s(.+)/)[0]; //everything before the first space str_2 = str.split(/\s(.+)/)[1]; //everything after the first space 

每当我需要从一个类的列表或类名或id的一部分获得一个类,我总是使用split(),然后或者具体与数组索引,或者在我的情况下,通常pop()获取最后一个元素或shift()来获得第一个。

这个例子获取div的类“gallery_148 ui-sortable”并返回图库ID 148。

 var galleryClass = $(this).parent().prop("class"); // = gallery_148 ui-sortable var galleryID = galleryClass.split(" ").shift(); // = gallery_148 galleryID = galleryID.split("_").pop(); // = 148 //or galleryID = galleryID.substring(8); // = 148 also, but less versatile 

我敢肯定,它可以压缩成更less的行,但我把它扩大了可读性。

在游戏后期,我知道,但似乎有一个非常简单的方法来做到这一点:

 var str = "72 tocirah sneab"; var arr = str.split(/ (.*)/); 

这将使arr[0]"72"arr[1]"tocirah sneab"

以供参考:

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

我需要一个稍微不同的结果。

我想要第一个字,以及后来发生了什么 – 即使它是空白的。

 str.substr(0, text.indexOf(' ') == -1 ? text.length : text.indexOf(' ')); str.substr(text.indexOf(' ') == -1 ? text.length : text.indexOf(' ') + 1); 

所以如果input是oneword你会得到一个字和''

如果input是one word and some more你得到one word and some more