Am't obține un optimizat regex că split-mi un Șir bazându-se în primul spațiu alb apariție:
var str="72 tocirah sneab";
Am nevoie pentru a obține:
[
"72",
"tocirah sneab",
]
Dacă îți pasă doar de caracterul spațiu (și nu tab-uri sau alte spații de caractere) și de îngrijire numai despre tot înainte de primul spațiu și tot ce a urmat după primul spațiu, puteți face fără o expresie regulată astfel:
str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"
Rețineți că, dacă nu există nici un spațiu, la toate, atunci prima linie se va întoarce un șir gol și a doua linie va reveni întregul șir. Asigurați-vă că este comportamentul pe care doriți în această situație (sau că această situație nu va apărea).
Javascript nu't suport lookbehinds, deci "split" nu este posibilă. "meci" funcționează:
str.match(/^(\S+)\s(.*)/).slice(1)
Un alt truc:
str.replace(/\s+/, '\x01').split('\x01')
ce zici de:
[str.replace(/\s.*/, ''), str.replace(/\S+\s/, '')]
și de ce nu
reverse = function (s) { return s.split('').reverse().join('') }
reverse(str).split(/\s(?=\S+$)/).reverse().map(reverse)
sau poate
re = /^\S+\s|.*/g;
[].concat.call(re.exec(str), re.exec(str))
2019 update: ca de ES2018, lookbehinds sunt acceptate:
str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)
Târziu în joc, stiu, dar nu pare a fi un mod foarte simplu de a face acest lucru:
const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);
Acest lucru va lăsa arr[0] " cu ""72"
și arr[1] " cu " "tocirah sneab"
. Rețineți că arr[2] va fi gol, dar puteți ignora pur și simplu.
Pentru referință:
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"];
dar eu încă mai cred că există un mod mai rapid, deși.
georg's soluție este frumos, dar se rupe dacă șirul nu't conține orice spațiu. Dacă siruri de caractere au o șansă de care nu conțin spații, l's mai sigur de a utiliza .split și capturarea grupe astfel:
str_1 = str.split(/\s(.+)/)[0]; //everything before the first space
str_2 = str.split(/\s(.+)/)[1]; //everything after the first space
Puteți folosi, de asemenea,.replace pentru a înlocui numai prima apariție,
str = str.replace(' ','<br />');
Lăsând la o /g.
Doar split string într-o matrice și lipici piesele de care aveți nevoie, împreună. Această abordare este foarte flexibil, se lucreaza în multe situații și este ușor pentru un motiv. Plus ai nevoie doar de un apel de funcție.
arr = str.split(' '); // ["72", "tocirah", "sneab"]
strA = arr[0]; // "72"
strB = arr[1] + ' ' + arr[2]; // "tocirah sneab"
Alternativ, dacă doriți pentru a alege ceea ce ai nevoie direct de la string-ai putea face ceva de genul asta:
strA = str.split(' ')[0]; // "72";
strB = str.slice(strA.length + 1); // "tocirah sneab"
Sau ca aceasta:
strA = str.split(' ')[0]; // "72";
strB = str.split(' ').splice(1).join(' '); // "tocirah sneab"
Cu toate acestea sugerez primul exemplu.
Lucru demo: jsbin
Am nevoie de un ușor rezultat diferit.
Am vrut ca primul cuvânt, și ceea ce a venit după ea, chiar dacă a fost gol.
str.substr(0, text.indexOf(' ') == -1 ? text.length : text.indexOf(' '));
str.substr(text.indexOf(' ') == -1 ? text.length : text.indexOf(' ') + 1);
deci, dacă la intrare este oneword
ai oneword
și''
.
Dacă intrarea este un cuvânt și ceva mai mult
ai o " și " cuvânt și ceva mai mult
.
Ori de câte ori am nevoie pentru a obține o clasă dintr-o listă de clase sau o parte a unui nume de clasa sau id-ul, eu folosesc întotdeauna split() atunci fie înțeles în mod specific cu indice matrice sau, de cele mai multe ori, în cazul meu, pop (), pentru a obține ultimul element sau shift() pentru a obține primul.
Acest exemplu devine div's clase "gallery_148 ui-sortable" și se întoarce galerie 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
Am'sunt sigur că acesta ar putea fi compactat în mai puțin de linii dar l-am lăsat extins pentru lizibilitate.