no he tenido una expresión regular optimizado que me dividir una cadena basando en el primer espacio ocurrencia blanco:Separar una cadena en el primer espacio de ocurrencia blanco
var str="72 tocirah sneab";
Necesito llegar:
72
tocirah sneab
no he tenido una expresión regular optimizado que me dividir una cadena basando en el primer espacio ocurrencia blanco:Separar una cadena en el primer espacio de ocurrencia blanco
var str="72 tocirah sneab";
Necesito llegar:
72
tocirah sneab
Si sólo se preocupan por el carácter de espacio (y no pestañas u otros caracteres de espacio en blanco) y sólo se preocupan por todo antes del primer espacio y todo después de que el primer espacio, puede hacerlo sin una expresión regular como esto:
Tenga en cuenta que si no hay espacio en absoluto, la primera línea devolverá una cadena vacía y la segunda línea devolverá la cadena completa. Asegúrese de que ese es el comportamiento que desea en esa situación (o que esa situación no surgirá).
¿Es esto más que 'str. dividir ('') [0] '? – Growler
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 creyendo que hay una manera más rápida.
Javascript no es compatible con lookbehinds, por lo que split
no es posible. match
obras:
str.match(/^(\S+)\s(.*)/).slice(1)
Otro truco:
str.replace(/\s+/, '\x01').split('\x01')
¿qué 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))
Un buen micro tutorial de expresiones regulares :) – esp
También puede utilizar .replace sustituir sólo la primera aparición,
str = str.replace(' ','<br />');
Dejando de lado la/g.
@DannyHerran .. No, ¿no? ¿Has probado el código? No hay modificador/g. No es global. [Intente probar el código antes de pretender saber lo que hace] (http://jsfiddle.net/LWCZj/). Probado en los tres principales navegadores también. Me gustaría saber por qué piensas lo que haces. – Daedalus
Cada vez que necesito para obtener una clase a partir de una lista de clases o una parte de un nombre de clase o ID, siempre uso split() entonces o bien entiendo específicamente con el índice de la matriz o, más a menudo en mi caso, pop() para obtener el último elemento o shift() para obtener el primero.
este ejemplo se obtienen las clases del div "gallery_148 ui-ordenable" y devuelve la galería Identificación del 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
Estoy seguro de que podría ser compactado en menos líneas, pero lo dejé ampliado para facilitar la lectura.
Necesitaba un resultado ligeramente diferente.
Quería la primera palabra, y lo que viniera después, incluso si estaba en blanco.
str.substr(0, text.indexOf(' ') == -1 ? text.length : text.indexOf(' '));
str.substr(text.indexOf(' ') == -1 ? text.length : text.indexOf(' ') + 1);
por lo que si la entrada es oneword
que presentamos lo oneword
y ''
.
Si la entrada es one word and some more
obtienes one
y word and some more
.
En ES6 se puede también
let [first, ...second] = str.split(" ")
second = second.join(" ")
Me gustó bastante y funciona bien, pero en cuanto al rendimiento, es bastante malo para la solución de "subcadena" más votada. acaba de probarlo y es aproximadamente 10 veces más lento. – pootzko
Sólo dividir la cadena en una matriz y pegar las piezas que necesita juntos. Este enfoque es muy flexible, funciona en muchas situaciones y es fácil razonar sobre ello. Además, solo necesita una llamada de función.
arr = str.split(' '); // ["72", "tocirah", "sneab"]
strA = arr[0]; // "72"
strB = arr[1] + ' ' + arr[2]; // "tocirah sneab"
Alternativamente, si desea cereza escoger lo que necesita directamente de la cadena que podría hacer algo como esto:
strA = str.split(' ')[0]; // "72";
strB = str.slice(strA.length + 1); // "tocirah sneab"
O así:
strA = str.split(' ')[0]; // "72";
strB = str.split(' ').splice(1).join(' '); // "tocirah sneab"
Sin embargo, me sugerir el primer ejemplo.
demostración de trabajo: solución jsbin
¡Te gusta esto! ¿Tienes "contras"? – iglesiasedd
Gracias! No que yo sepa. – Rotareti
de Georg es agradable, pero se rompe si la cadena no contiene ningún espacio en blanco. Si sus cadenas tienen la oportunidad de no contener espacios en blanco, es más seguro utilizar .split y grupos de captura de este modo:
str_1 = str.split(/\s(.+)/)[0]; //everything before the first space
str_2 = str.split(/\s(.+)/)[1]; //everything after the first space
tarde al juego, lo sé, pero parece que hay una manera muy simple de hacer esto:
var str = "72 tocirah sneab";
var arr = str.split(/ (.*)/);
Esto dejará arr[0]
con "72"
y arr[1]
con "tocirah sneab"
.
Como referencia:
¿Qué quiere decir con "optimizado"? ¿* Tiene que * ser una expresión regular? – Deestan
No, si hay otra forma, es bienvenido :) – Luca
Por favor, tómese el tiempo para desplazarse hacia abajo a la respuesta de @ georg - hermoso http://stackoverflow.com/a/10272828/93910 –