Я не'т получить оптимизированное выражение, что сплит мне строку, основываясь в первую пробелы возникновения:
var str="72 tocirah sneab";
Мне нужно сделать:
[
"72",
"tocirah sneab",
]
Если вас волнует только пробел (а не вкладки или другие пробельные символы) и заботятся только о все до первого пробела и все после первого пробела, вы можете сделать это без регулярных выражений, как это:
str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"
Обратите внимание, что если нет пространства, то в первой строке будет возвращать пустую строку и вторую строку возвращает всю строку. Будьте уверены, что поведение, которое вы хотите в этой ситуации (или что такая ситуация не возникнет).
В JavaScript не'т поддерживает lookbehinds, так что разделить не представляется возможным. "матч" работает:
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)
в
В ЕС6 вы также можете
let [first, ...second] = str.split(" ")
second = second.join(" ")
Поздно в игре, я знаю, но там, кажется, очень простой способ сделать это:
в
const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);
в
Это позволит оставить ОБР[0]С в
"72"В и
Арр[1]С в
"sneab tocirah"` в. Обратите внимание, что Арр[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"];
но я все-таки думаю, что есть хоть и более быстрый способ.
Георг'ный раствор хороший, но ломается, если строка не'т содержать никаких пробелов. Если строки имеют шанс не содержащий пробелов, это'ы безопаснее использовать .Сплит и группами захвата вроде так:
str_1 = str.split(/\s(.+)/)[0]; //everything before the first space
str_2 = str.split(/\s(.+)/)[1]; //everything after the first space
Вы также можете использовать .заменить, чтобы заменить только первое вхождение,
str = str.replace(' ','<br />');
Выходить /г.
[Демо](
)Просто разбить строку в массив и клеить детали нужно вместе. Этот подход является очень гибким, он работает во многих ситуациях, и это простой в понимании. Плюс вам нужен только один вызов функции.
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
Мне нужен немного другой результат.
Я хотел, чтобы первое слово, и что бы ни пришел после него - даже если он был пустым.
str.substr(0, text.indexOf(' ') == -1 ? text.length : text.indexOf(' '));
str.substr(text.indexOf(' ') == -1 ? text.length : text.indexOf(' ') + 1);
так, если входные данные oneword
вы получаете oneword
и''
.
Если входными данными является одним словом и еще
вы один
и Слово и некоторые более
.
Когда мне нужно сделать класс из списка классов или часть имени класса или ID, я всегда использовать сплит (), то либо сделать ее конкретно с индекса массива или, чаще всего, в моем случае, поп (), чтобы получить последний элемент или Shift (), чтобы получить первый.
Этот пример получает див'ы уроки на "уй-сортные gallery_148 и" и возвращает идентификатор галереи 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
Я'м, что он мог бы укатать в меньше строк, но я оставил его расширили для удобства чтения.