在第一个空白处出现分割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"
。
以供参考:
我需要一个稍微不同的结果。
我想要第一个字,以及后来发生了什么 – 即使它是空白的。
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
。