No conseguí una regex optimizada que me dividiera un String basándose en la primera ocurrencia de espacio en blanco:
var str="72 tocirah sneab";
Necesito obtener:
[
"72",
"tocirah sneab",
]
Si sólo te importa el carácter espacio (y no los tabuladores u otros caracteres de espacio en blanco) y sólo te importa todo lo que hay antes del primer espacio y todo lo que hay después del primer espacio, puedes hacerlo sin una expresión regular como ésta:
str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"
Tenga en cuenta que si no hay ningún espacio, la primera línea devolverá una cadena vacía y la segunda línea devolverá la cadena completa. Asegúrese de que ése es el comportamiento que desea en esa situación (o de que esa situación no se producirá).
Javascript no soporta lookbehinds, por lo que split
no es posible. El match
funciona:
str.match(/^(\S+)\s(.*)/).slice(1)
Otro truco:
str.replace(/\s+/, '\x01').split('\x01')
que tal:
[str.replace(/\s.*/, ''), str.replace(/\S+\s/, '')]
y por qué no
reverse = function (s) { return s.split('').reverse().join('') }
reverse(str).split(/\s(?=\S+$)/).reverse().map(reverse)
o tal vez
re = /^\S+\s|.*/g;
[].concat.call(re.exec(str), re.exec(str))
Actualización de 2019: a partir de ES2018, se admiten lookbehinds:
begin snippet: js hide: false console: true babel: false -->
str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)
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"];
pero sigo pensando que hay una manera más rápida sin embargo.