Bana ilk beyaz boşluk olayı temel alarak bir dize ayıran optimize bir regex alamadım:
var str="72 tocirah sneab";
Almam gerek:
[
"72",
"tocirah sneab",
]
Bana ilk beyaz boşluk olayı temel alarak bir dize ayıran optimize bir regex alamadım:
var str="72 tocirah sneab";
Almam gerek:
[
"72",
"tocirah sneab",
]
Yanıtlar:
Yalnızca boşluk karakterini (sekmeleri veya diğer boşluk karakterlerini değil) ve yalnızca ilk boşluktan önceki her şeyi ve ilk boşluktan sonraki her şeyi önemsiyorsanız, bunu aşağıdaki gibi normal bir ifade olmadan yapabilirsiniz:
str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"
Hiç boşluk yoksa, ilk satırın boş bir dize ve ikinci satırın da tüm dizeyi döndüreceğini unutmayın. Bu durumda istediğiniz davranışın (veya bu durumun ortaya çıkmayacağından) emin olun.
Javascript lookbehinds'i desteklemediğinden split
mümkün değildir. match
İşler:
str.match(/^(\S+)\s(.*)/).slice(1)
Başka bir numara:
str.replace(/\s+/, '\x01').split('\x01')
nasıl:
[str.replace(/\s.*/, ''), str.replace(/\S+\s/, '')]
ve neden olmasın
reverse = function (s) { return s.split('').reverse().join('') }
reverse(str).split(/\s(?=\S+$)/).reverse().map(reverse)
ya da belki
re = /^\S+\s|.*/g;
[].concat.call(re.exec(str), re.exec(str))
2019 güncellemesi : ES2018'den itibaren, görünümler desteklenmektedir:
str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)
str.match(/^(\S+)\s(.*)/).slice(1)
alanı olmayan bir dize için alışkanlık
ES6'da şunları da yapabilirsiniz:
let [first, ...second] = str.split(" ")
second = second.join(" ")
Oyunun sonlarına doğru biliyorum, ama bunu yapmanın çok basit bir yolu var gibi görünüyor:
const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);
Bu bırakacaktır arr[0]
ile "72"
ve arr[1]
ile"tocirah sneab"
. Arr [2] 'nin boş olacağını unutmayın, ancak yok sayabilirsiniz.
Referans için:
georg'in çözümü güzel, ancak dize boşluk içermiyorsa kesiliyor. Dizelerinizin boşluk içermeme şansı varsa, .split ve bu gibi grupları yakalamak daha güvenlidir:
str_1 = str.split(/\s(.+)/)[0]; //everything before the first space
str_2 = str.split(/\s(.+)/)[1]; //everything after the first space
.Replace komutunu yalnızca ilk olayı değiştirmek için de kullanabilirsiniz,
str = str.replace(' ','<br />');
/ G çıkışını bırakarak.
Dizeyi bir diziye ayırın ve ihtiyacınız olan parçaları birbirine yapıştırın. Bu yaklaşım çok esnektir, birçok durumda işe yarar ve akıl yürütmesi kolaydır. Artı sadece bir işlev çağrısı gerekir.
arr = str.split(' '); // ["72", "tocirah", "sneab"]
strA = arr[0]; // "72"
strB = arr[1] + ' ' + arr[2]; // "tocirah sneab"
Alternatif olarak, ihtiyacınız olan şeyi doğrudan dizeden almak istiyorsanız, bunun gibi bir şey yapabilirsiniz:
strA = str.split(' ')[0]; // "72";
strB = str.slice(strA.length + 1); // "tocirah sneab"
Veya bunun gibi:
strA = str.split(' ')[0]; // "72";
strB = str.split(' ').splice(1).join(' '); // "tocirah sneab"
Ancak ilk örneği öneririm.
Çalışma demosu: jsbin
Sınıflar listesinden veya sınıf adı veya kimliğinin bir bölümünden bir sınıf almam gerektiğinde, her zaman split () kullanın ve sonra dizi dizini ile özel olarak olsun veya çoğunlukla benim durumumda pop () almak için ilk öğeyi almak için son öğeyi veya shift () yöntemini kullanın.
Bu örnek div'in "gallery_148 ui-sortable" sınıflarını alır ve 148 galeri kimliğini döndürür.
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
Eminim daha az çizgiye sıkıştırılabilir ama okunabilirlik için genişletilmiş olarak bıraktım.
Biraz farklı bir sonuca ihtiyacım vardı.
İlk kelimeyi ve bundan sonra ne geldiğini istedim - boş olsa bile.
str.substr(0, text.indexOf(' ') == -1 ? text.length : text.indexOf(' '));
str.substr(text.indexOf(' ') == -1 ? text.length : text.indexOf(' ') + 1);
böylece giriş oneword
alırsanız oneword
ve ''
.
Eğer giriş ise ve one word and some more
alırsınız .one
word and some more
Diğer tüm cevapların neden bu kadar karmaşık olduğundan emin değilim, hepsini tek bir satırda yapabileceğinizde, alan eksikliğini de ele alabilirsiniz.
Örnek olarak, bir adın ilk ve "diğer" bileşenlerini alalım:
let [first, last] = 'John Von Doe'.split(/ (.*)/);
console.log({ first, last });
[first, last] = 'Surma'.split(/ (.*)/);
console.log({ first, last });
Aşağıdaki işlev cümleyi her zaman 2 öğeye böler. İlk öğe yalnızca ilk sözcüğü ve ikinci öğe diğer tüm kelimeleri içerecektir (veya boş bir dize olacaktır).
var arr1 = split_on_first_word("72 tocirah sneab"); // Result: ["72", "tocirah sneab"]
var arr2 = split_on_first_word(" 72 tocirah sneab "); // Result: ["72", "tocirah sneab"]
var arr3 = split_on_first_word("72"); // Result: ["72", ""]
var arr4 = split_on_first_word(""); // Result: ["", ""]
function split_on_first_word(str)
{
str = str.trim(); // Clean string by removing beginning and ending spaces.
var arr = [];
var pos = str.indexOf(' '); // Find position of first space
if ( pos === -1 ) {
// No space found
arr.push(str); // First word (or empty)
arr.push(''); // Empty (no next words)
} else {
// Split on first space
arr.push(str.substr(0,pos)); // First word
arr.push(str.substr(pos+1).trim()); // Next words
}
return arr;
}