Сплит-строка в первом появлении белого пространства

Я не получил оптимизированное регулярное выражение, которое разделило бы меня на String, основанное на первом появлении пробела:

var str="72 tocirah sneab";

Мне нужно получить:

[
    "72",
    "tocirah sneab",
]

Ответ 1

Если вам небезразличен только символ пробела (а не вкладки или другие символы пробелов), и только забота обо всем перед первым пространством и все после первого пробела вы можете сделать это без регулярного выражения вроде этого:

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

Обратите внимание, что если места вообще нет, тогда первая строка вернет пустую строку, а вторая строка вернет всю строку. Убедитесь, что это поведение, которое вы хотите в этой ситуации (или эта ситуация не возникнет).

Ответ 2

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))

Обновление 2019: начиная с ES2018, поддерживаются виды:

str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)

Ответ 3

В ES6 вы также можете

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

Ответ 4

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"];

но я все еще думаю, что есть более быстрый способ.

Ответ 5

В конце игры, я знаю, но, кажется, есть очень простой способ сделать это:

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

Ответ 6

georg solution хорошо, но ломается, если строка не содержит пробелов. Если ваши строки имеют шанс не содержать пробелов, безопаснее использовать .split и захватить такие группы:

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

Ответ 7

Вы также можете использовать .replace, чтобы заменить первое вхождение,

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

Оставив/g.

DEMO

Ответ 8

Просто разделите строку на массив и приклейте нужные части. Этот подход очень гибкий, он работает во многих ситуациях, и его легко рассуждать. Кроме того, вам нужен только один вызов функции.

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

В качестве альтернативы, если вы хотите, чтобы вишня-выбрать то, что вам нужно непосредственно из строки, вы можете сделать что-то вроде этого:

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"

Однако я предлагаю первый пример.

Рабочая демонстрация: jsbin

Ответ 9

Всякий раз, когда мне нужно получить класс из списка классов или части имени класса или идентификатора, я всегда использую 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 

Я уверен, что его можно было бы сжать в несколько строк, но я оставил его расширенным для удобочитаемости.

Ответ 10

Мне нужен был немного другой результат.

Мне нужно первое слово, и что когда-либо было после него - даже если оно было пустым.

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

поэтому, если вход oneword, вы получите oneword и ''.

Если вход one word and some more, вы получаете one и word and some more.