Saya tidak mendapatkan regex yang dioptimalkan yang memisahkan saya dengan String yang mendasarkan pada kejadian ruang putih pertama:
var str="72 tocirah sneab";
Saya perlu mendapatkan:
[
"72",
"tocirah sneab",
]
Saya tidak mendapatkan regex yang dioptimalkan yang memisahkan saya dengan String yang mendasarkan pada kejadian ruang putih pertama:
var str="72 tocirah sneab";
Saya perlu mendapatkan:
[
"72",
"tocirah sneab",
]
Jawaban:
Jika Anda hanya peduli dengan karakter spasi (dan bukan tab atau karakter spasi putih lainnya) dan hanya peduli tentang segala sesuatu sebelum spasi pertama dan semua setelah spasi pertama, Anda bisa melakukannya tanpa ekspresi reguler seperti ini:
str.substr(0,str.indexOf(' ')); // "72"
str.substr(str.indexOf(' ')+1); // "tocirah sneab"
Perhatikan bahwa jika tidak ada ruang sama sekali, maka baris pertama akan mengembalikan string kosong dan baris kedua akan mengembalikan seluruh string. Pastikan itu adalah perilaku yang Anda inginkan dalam situasi itu (atau bahwa situasi itu tidak akan muncul).
Javascript tidak mendukung tampilan, jadi split
tidak mungkin. match
bekerja:
str.match(/^(\S+)\s(.*)/).slice(1)
Trik lain:
str.replace(/\s+/, '\x01').split('\x01')
bagaimana tentang:
[str.replace(/\s.*/, ''), str.replace(/\S+\s/, '')]
dan kenapa tidak
reverse = function (s) { return s.split('').reverse().join('') }
reverse(str).split(/\s(?=\S+$)/).reverse().map(reverse)
atau mungkin
re = /^\S+\s|.*/g;
[].concat.call(re.exec(str), re.exec(str))
Pembaruan 2019 : pada ES2018, lookbehinds didukung:
str = "72 tocirah sneab"
s = str.split(/(?<=^\S+)\s/)
console.log(s)
str.match(/^(\S+)\s(.*)/).slice(1)
tidak akan bekerja untuk string yang tidak memiliki ruang
Di ES6 Anda juga bisa
let [first, ...second] = str.split(" ")
second = second.join(" ")
Terlambat dalam permainan, saya tahu tetapi tampaknya ada cara yang sangat sederhana untuk melakukan ini:
const str = "72 tocirah sneab";
const arr = str.split(/ (.*)/);
console.log(arr);
Ini akan pergi arr[0]
dengan "72"
dan arr[1]
dengan "tocirah sneab"
. Perhatikan bahwa arr [2] akan kosong, tetapi Anda bisa mengabaikannya.
Sebagai referensi:
solusi georg bagus, tetapi rusak jika string tidak mengandung spasi. Jika string Anda memiliki kemungkinan tidak mengandung spasi, lebih aman untuk menggunakan .sit dan menangkap grup seperti ini:
str_1 = str.split(/\s(.+)/)[0]; //everything before the first space
str_2 = str.split(/\s(.+)/)[1]; //everything after the first space
Anda juga dapat menggunakan. Ganti hanya untuk mengganti kejadian pertama,
str = str.replace(' ','<br />');
Meninggalkan / g.
Hanya membagi string menjadi array dan rekatkan bagian-bagian yang Anda butuhkan bersama. Pendekatan ini sangat fleksibel, ia bekerja dalam banyak situasi dan mudah dipikirkan. Plus Anda hanya perlu satu panggilan fungsi.
arr = str.split(' '); // ["72", "tocirah", "sneab"]
strA = arr[0]; // "72"
strB = arr[1] + ' ' + arr[2]; // "tocirah sneab"
Atau, jika Anda ingin memilih apa yang Anda butuhkan langsung dari string, Anda bisa melakukan sesuatu seperti ini:
strA = str.split(' ')[0]; // "72";
strB = str.slice(strA.length + 1); // "tocirah sneab"
Atau seperti ini:
strA = str.split(' ')[0]; // "72";
strB = str.split(' ').splice(1).join(' '); // "tocirah sneab"
Namun saya menyarankan contoh pertama.
Demo kerja: jsbin
Setiap kali saya perlu mendapatkan kelas dari daftar kelas atau bagian dari nama atau id kelas, saya selalu menggunakan split () lalu mendapatkannya secara spesifik dengan indeks array atau, paling sering dalam kasus saya, pop () untuk mendapatkan elemen terakhir atau shift () untuk mendapatkan yang pertama.
Contoh ini mendapatkan kelas div "gallery_148 ui-sortable" dan mengembalikan id galeri 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
Saya yakin itu bisa dipadatkan menjadi lebih sedikit baris tapi saya membiarkannya diperluas untuk dibaca.
Saya membutuhkan hasil yang sedikit berbeda.
Saya ingin kata pertama, dan apa yang terjadi setelahnya - bahkan jika itu kosong.
str.substr(0, text.indexOf(' ') == -1 ? text.length : text.indexOf(' '));
str.substr(text.indexOf(' ') == -1 ? text.length : text.indexOf(' ') + 1);
jadi jika input yang oneword
Anda dapatkan oneword
dan ''
.
Jika inputnya one word and some more
Anda dapatkan one
dan word and some more
.
Saya tidak yakin mengapa semua jawaban lain begitu rumit, ketika Anda bisa melakukan semuanya dalam satu baris, menangani kekurangan ruang juga.
Sebagai contoh, mari kita dapatkan komponen pertama dan "lainnya" dari sebuah nama:
let [first, last] = 'John Von Doe'.split(/ (.*)/);
console.log({ first, last });
[first, last] = 'Surma'.split(/ (.*)/);
console.log({ first, last });
Fungsi berikut akan selalu membagi kalimat menjadi 2 elemen. Elemen pertama hanya akan berisi kata pertama dan elemen kedua akan berisi semua kata lain (atau itu akan menjadi string kosong).
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;
}