Bagaimana cara memisahkan string dengan beberapa pemisah dalam JavaScript? Saya mencoba untuk membagi pada koma dan spasi tetapi, AFAIK, fungsi pemisahan JS hanya mendukung satu pemisah.
javascript
regex
split
mikemaccana
sumber
sumber
Jawaban:
Lulus dalam regexp sebagai parameter:
Diedit untuk menambahkan:
Anda bisa mendapatkan elemen terakhir dengan memilih panjang array dikurangi 1:
... dan jika polanya tidak cocok:
sumber
(hello world)|\|
belum cukup berhasil. Ada ide?Anda bisa memasukkan regex ke operator perpecahan Javascript . Sebagai contoh:
Atau, jika Anda ingin mengizinkan beberapa pemisah bersama untuk bertindak sebagai satu-satunya:
(Anda harus menggunakan parens yang tidak menangkap (? :) karena jika tidak maka akan disambungkan kembali ke hasilnya. Atau Anda bisa pintar seperti Aaron dan menggunakan kelas karakter.)
(Contoh diuji dalam Safari + FF)
sumber
|
seperti yang ditunjukkan Jesse.Metode lain yang sederhana namun efektif adalah dengan menggunakan split + join berulang kali.
Pada dasarnya melakukan split diikuti oleh join seperti ganti global sehingga ini menggantikan setiap pemisah dengan koma maka setelah semua diganti itu melakukan split akhir pada koma
Hasil dari ungkapan di atas adalah:
Memperluas ini Anda juga bisa menempatkannya dalam suatu fungsi:
Pemakaian:
Jika Anda banyak menggunakan fungsi ini, bahkan mungkin patut dipertimbangkan untuk membungkusnya
String.prototype.split
untuk kenyamanan (saya pikir fungsi saya cukup aman - satu-satunya pertimbangan adalah tambahan overhead dari kondisi (kecil) dan fakta bahwa ia tidak memiliki implementasi dari argumen batas jika sebuah array dilewatkan).Pastikan untuk memasukkan
splitMulti
fungsi jika menggunakan pendekatan ini di bawah ini hanya membungkusnya :). Juga patut dicatat bahwa beberapa orang tidak suka memperluas built-in (karena banyak orang melakukan kesalahan dan konflik dapat terjadi) jadi jika ragu berbicara dengan seseorang yang lebih senior sebelum menggunakan ini atau bertanya pada SO :)Pemakaian:
Nikmati!
sumber
for(var i = 0; i < tokens.length; i++)
dan tidakfor(var i = 1; i < tokens.length; i++)
?tokens[1]
untuk menyimpan satu iterasitokens[0] == tempchar
dan kami membagitempchar
setelah iterasitokens
untuk menyelesaikan. Saya akan memperbarui jawabannya sesuai dengan terima kasih @tic :).Mari kita tetap sederhana: (tambahkan "[] +" ke RegEx Anda berarti "1 atau lebih")
Ini berarti "+" dan "{1,}" adalah sama.
sumber
Metode rumit:
sumber
:/
'('
untuk/(/g
mengganti semua(
elemen -g
adalah bendera global untuk RegExp - sehingga ia mencari semua kejadian yang(
bukan yang pertamaBagi Anda yang ingin lebih banyak kustomisasi dalam fungsi pemisahan mereka, saya menulis algoritma rekursif yang membagi string yang diberikan dengan daftar karakter untuk dibagi. Saya menulis ini sebelum saya melihat posting di atas. Saya harap ini membantu beberapa programmer yang frustrasi.
Contoh pengembalian di atas:
["people", "and", "other", "things"]
Catatan:
flatten
fungsi diambil dari Rosetta Codesumber
Anda bisa mengelompokkan semua karakter yang ingin Anda gunakan sebagai pemisah, baik tunggal atau kolektif ke dalam ekspresi reguler dan meneruskannya ke fungsi split. Misalnya, Anda dapat menulis:
Dan hasilnya adalah:
sumber
Mungkin Anda harus melakukan semacam penggantian string untuk mengubah satu pemisah menjadi pemisah yang lain sehingga Anda hanya memiliki satu pemisah untuk menangani perpecahan Anda.
sumber
Hai misalnya jika Anda telah membagi dan mengganti di String 07:05:45
Hasil
sumber
Berikut adalah cara baru untuk mencapai hal yang sama di ES6 :
Harap dicatat dalam fungsi ini:
source
Hasil dari kode di atas adalah:
sumber
ini akan mengembalikan string tanpa charecter khusus.
sumber
Refactor @Brian saya menjawab
sumber
Saya menemukan bahwa salah satu alasan utama saya perlu ini adalah untuk membagi jalur file pada keduanya
/
dan\
. Ini sedikit regex yang rumit jadi saya akan mempostingnya di sini untuk referensi:sumber
Saya pikir lebih mudah jika Anda menentukan apa yang ingin Anda tinggalkan, bukan apa yang ingin Anda hapus.
Seolah-olah Anda hanya ingin kata-kata bahasa Inggris, Anda dapat menggunakan sesuatu seperti ini:
Contoh (run snippet):
sumber
Mulai dari solusi @ stephen-sweriduk (yang lebih menarik bagi saya!), Saya telah sedikit memodifikasinya untuk membuat lebih umum dan dapat digunakan kembali:
lalu
yang mengembalikan seperti aslinya:
sumber
Tampilkan cuplikan kode
sumber
Saya akan memberikan implementasi klasik untuk fungsi tersebut. Kode ini berfungsi di hampir semua versi JavaScript dan entah bagaimana optimal.
Hanya kode murni:
Anda dapat melihat kode berjalan di taman bermain: https://codeguppy.com/code.html?IJI0E4OGnkyTZnoszAzf
sumber
Saya tidak tahu kinerja RegEx, tetapi di sini ada alternatif lain untuk RegEx memanfaatkan HashSet asli dan bekerja dalam kompleksitas O (max (str.length, delimeter.length)) sebagai gantinya:
sumber
Bukan cara terbaik tetapi berfungsi untuk Berpisah dengan Pemisah / Pembatas Banyak dan Berbeda
html
javascript
sumber
Saya menggunakan regexp:
sumber