Я не получил оптимизированное регулярное выражение, которое разделило бы меня на String, основанное на первом появлении пробела:
var str="72 tocirah sneab";
Мне нужно получить:
[
"72",
"tocirah sneab",
]
Я не получил оптимизированное регулярное выражение, которое разделило бы меня на String, основанное на первом появлении пробела:
var str="72 tocirah sneab";
Мне нужно получить:
[
"72",
"tocirah sneab",
]
Если вам небезразличен только символ пробела (а не вкладки или другие символы пробелов), и только забота обо всем перед первым пространством и все после первого пробела вы можете сделать это без регулярного выражения вроде этого:
str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"
Обратите внимание, что если места вообще нет, тогда первая строка вернет пустую строку, а вторая строка вернет всю строку. Убедитесь, что это поведение, которое вы хотите в этой ситуации (или эта ситуация не возникнет).
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)
В ES6 вы также можете
let [first, ...second] = str.split(" ")
second = second.join(" ")
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"];
но я все еще думаю, что есть более быстрый способ.
В конце игры, я знаю, но, кажется, есть очень простой способ сделать это:
const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);
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
Вы также можете использовать .replace, чтобы заменить первое вхождение,
str = str.replace(' ','<br />');
Оставив/g.
Просто разделите строку на массив и приклейте нужные части. Этот подход очень гибкий, он работает во многих ситуациях, и его легко рассуждать. Кроме того, вам нужен только один вызов функции.
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
Всякий раз, когда мне нужно получить класс из списка классов или части имени класса или идентификатора, я всегда использую 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
Я уверен, что его можно было бы сжать в несколько строк, но я оставил его расширенным для удобочитаемости.
Мне нужен был немного другой результат.
Мне нужно первое слово, и что когда-либо было после него - даже если оно было пустым.
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
.